2303191 发表于Sunday, February 10, 2008 8:44:36 PM IP:举报删除
可以防止程序集被篡改。(这点还不是很明朗要继续加油,有明白的告诉我一下)
不能防止修改程序集,但是clr能通过公钥验证签名就知道程序集是否被修改了bhtfg538 发表于Monday, September 15, 2008 5:23:02 PM IP:举报删除
楼主理解错了
首先 sn -k privateKey.snk
不是生成 私钥 是生成一个 公钥/私钥 对
然后可以通过 sn -p privateKey.snk publicKey.snk 获取一个 公钥用来 延迟签名(延迟签名就是使用公钥)
本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/armysone/archive/2008/01/17/2049891.aspx
程序集进行强命名有以下好处:
- 强命名后程序集可以被多个引用者共享。这个大家应该很清楚。
- CLR可以通过公钥验证签名了解该程序集是否被修改过。(谢谢2303191的回复)
- 3是。。。我不知道了,有谁知道了帮我加下。:)
强命名过程:
- 获取公钥/私钥对 sn -k privateKey.snk(谢谢bhtfg538的指正),一定要小心保管,丢了一切安全性都不存在了,其它人可以通过它发布由你签名的程序集。
- 获取公钥 sn -p privateKey.snk publicKey.snk,在延迟签名时派上用场。
- 生成强名程序集
1) csc /keyfile:privateKey.snk /t:dll ClassLibrary1.cs
2) 在AssemblyInfo.cs中添加 [assembly: AssemblyKeyFileAttribute("privateKey.snk")]
延迟签名过程:
- 进行延迟签名,为了保证私钥的安全,在开发时只使用公钥进行延迟签名
1) csc /keyfile:publicKey.snk /delaysign+ /t:dll ClassLibrary1.cs
2) 在AssemblyInfo.cs中添加 [assembly: AssemblyKeyFileAttribute("publicKey.snk")]
- 要发布时对该程序集重新进行强命名 sn -R ClassLibrary.dll privateKey.snk。
以上的命令行可以针对自己的需要修改,另外为保证私钥的安全,微软提供了一个保管私钥的容器,此时命令参数有变化,相关信息自行查找。