如题:求VS2005中如何生成强名称程序集
疑问一:网上的的教程都是说的.cs单个文件成一个单独的Dll程序集,可是asp.net中有许多.cs文件,也不能一个一个的作啊,那得有多少个Dll啊??
疑问二:SN.exe生成的密钥放到哪里,AssemblyKeyFile的路径是从网站根路径来的吗??
疑问三:如果,给客户文件时,必须把密钥一起给了吗(没有密钥,是不是网站就不能运行了?)??
疑问四:公钥和私钥,哪个写到AssemblyKeyFile中??不是不丢了其中的一个,就不能再开发这个项目了呢??
疑问五:是在项目一开始时,就用强名称和公钥,密钥,还是在项目完成了后,再作强名称和公钥,密钥呢??
疑问六:强名称是不是为WEB项目准备的(即,是不是可以用在WEB项目上)??
可能说的很乱,如果您有好的文章也提供一下,谢谢了。
------解决方案--------------------------------------------------------
疑问一:网上的的教程都是说的.cs单个文件成一个单独的Dll程序集,可是asp.net中有许多.cs文件,也不能一个一个的作啊,那得有多少个Dll啊??
答:怎么可能,一个dll对应一个内库文件,是你需要哪些,就加哪些
疑问二:SN.exe生成的密钥放到哪里,AssemblyKeyFile的路径是从网站根路径来的吗??
答:可以设置AssemblyKeyFile
疑问三:如果,给客户文件时,必须把密钥一起给了吗(没有密钥,是不是网站就不能运行了?)??
答:如果你的项目成果做了打包,可以在打包中加入密钥
疑问四:公钥和私钥,哪个写到AssemblyKeyFile中??不是不丢了其中的一个,就不能再开发这个项目了呢??
答:一个公钥对应一个私钥。
密钥对中,让大家都知道的是公钥,不告诉大家,只有自己知道的,是私钥。
如果用其中一个密钥加密数据,则只有对应的那个密钥才可以解密。
如果用其中一个密钥可以进行解密数据,则该数据必然是对应的那个密钥进行的加密。
疑问五:是在项目一开始时,就用强名称和公钥,密钥,还是在项目完成了后,再作强名称和公钥,密钥呢??
答:其实就看你们了,依据你的习惯,但最好在项目开始时加入
疑问六:强名称是不是为WEB项目准备的(即,是不是可以用在WEB项目上)??
答:强名称程序集里面要三样东西:
公钥标识(公钥的散列值的最后八个字节) ,公钥 ,密文
强名称机制最起码起到两个作用:区分程序集 ,避免程序集被恶意更改
------解决方案--------------------------------------------------------
l Name= MSCorLib
l Version=1.0.3300.0
l Culture=neutral
l PublicKeyToken=b77a5c561934e089
如果我们自己编写一个弱名称程序集,那么通常PublicKeyToken这一项就没有。
下面我尝试着说一说强名称的机制。
首先,你通过SN.exe获得一个公钥和一个密钥。
然后,使用公钥对程序集的可执行文件(不包括DOS头、PE头等)进行哈希算法,得到一个文件散列值。
最后,使用密钥对文件散列值进行加密,得到一个密文。
这样,最后的强名称程序集里面要三样东西:
l 公钥标识(公钥的散列值的最后八个字节)
l 公钥
l 密文
使用公钥和程序集的可执行文件(不包括DOS头、PE头等)进行哈希算法可以得到一个文件散列值,使用公钥和密文也可以得到一个文件散列值,如果这两个散列值完全一致,OK,验证通过。
最后,说说公钥标识(公钥的散列值的最后八个字节)的作用:
l 区分程序集,上面提到过它是程序集区分彼此的四大属性之一
l 验证公钥
总的来说,强名称机制最起码起到两个作用:
l 区分程序集
l 避免程序集被恶意更改
------解决方案--------------------------------------------------------
试着回答一下,错了莫怪。
【疑问一:网上的的教程都是说的.cs单个文件成一个单独的Dll程序集,可是asp.net中有许多.cs文件,也不能一个一个的作啊,那得有多少个Dll啊??】
可以把所有的程序生成一个统一的dll文件,有一个visual stuio web deployment project模板
来干这个事情,可以从微软的网站下载到。
【疑问二:SN.exe生成的密钥放到哪里,AssemblyKeyFile的路径是从网站根路径来的吗??】
生成的密钥放到工程文件下就可用了。
【疑问三:如果,给客户文件时,必须把密钥一起给了吗(没有密钥,是不是网站就不能运行了?)??】
不需要把密钥给客户,密钥只用来对程序集进行签名,不影响网站的运行。
【疑问四:公钥和私钥,哪个写到AssemblyKeyFile中??不是不丢了其中的一个,就不能再开发这个项目了呢??】
不知道你所指的AssemblyKeyFile是哪儿的?从签名来说当然是用私钥来签名。
【疑问五:是在项目一开始时,就用强名称和公钥,密钥,还是在项目完成了后,再作强名称和公钥,密钥呢??】
都可以。
【疑问六:强名称是不是为WEB项目准备的(即,是不是可以用在WEB项目上)??】
当然可以用在WEB项目上了。最典型有两种应用:
(1)WEB客户端控件或者程序(例如XBAP)使用强名称,然后通过在IE中设置信任的证书可以
给程序更高的安全级别;
(2)客户端或者服务器端程序(例如SharePoint webpart)如果需要部署到GAC中,则必须
进行签名以生成强名称,否则无法安装到GAC中。
------解决方案--------------------------------------------------------
自己动手做过 VS.NET 2003 ,那时只是为了学习 PKI 技术。
疑问一:网上的的教程都是说的.cs单个文件成一个单独的Dll程序集,可是asp.net中有许多.cs文件,也不能一个一个的作啊,那得有多少个Dll啊??
答:“可以只为一个项目做一个”
疑问二:SN.exe生成的密钥放到哪里,AssemblyKeyFile的路径是从网站根路径来的吗??
答:“可以是绝对路径,相对路径没试过”
疑问三:如果,给客户文件时,必须把密钥一起给了吗(没有密钥,是不是网站就不能运行了?)??
答:“不需要。只要一个生成好的 .snk 文件就行,里面已包含相关的私钥与公钥信息”
疑问四:公钥和私钥,哪个写到AssemblyKeyFile中??不是不丢了其中的一个,就不能再开发这个项目了呢??
答:两者都写进去了。文件丢了,就重新生成一个,重新编译一次即可。
疑问五:是在项目一开始时,就用强名称和公钥,密钥,还是在项目完成了后,再作强名称和公钥,密钥呢??