数字签名文件用来证明这个生成的程序集是你发布的;而且,如果你写的程序集要用在多个应用程序上的话,那么这个程序集必须要拥有唯一的名称,这个强名称是程序集唯一名称的一部分。 另外,只要你保护好你的snk文件不要公布出去,那么没有任何人可以假冒你发布程序集。 强名称签名的原理是不对称签名验证算法。 首先你用sn.exe命令行程序生成一个.snk的密钥文件,这个文件包括了两个部分的内容。 而且,验证码只能通过私钥来生成,只有通过私钥生成的验证码才能通过.Net CLR的验证。 CLR验证程序集的时候通过读取公钥来生成验证对象,生成过后对整个程序集的内容进行验证,拿这个验证码与程序集里面的验证码对比,如果吻合就通过,如果不吻合表示程序集已经被修改了,CLR将拒绝载入这个程序集并且认为需要的程序集没有找到,抛出FileNotFoundException异常。 比如说微软的.Net类库中的System.dll、System.Web.dll等,都经过了强名称验证,保证别人只能使用这些类库,而不能修改,还保证这些程序集是微软推出的。而且,这些程序集是存放在共享目录里面的,更加需要强名称了。 sn是强名称,在编译的时候可以作为.dll文件的key,如果你用其他*.snk文件代替原来的文件,.dll是无法编译的,当然也就谈不上运行了。 snk文件在.net里面被用作存放密钥或密钥对的存储文件,生成密钥对snk文件可以用.net中的sn.exe命令,如“sn -k keyPair.snk”。 强 命名程序集的缘由: 目前Windows中出现的DLL Hell问题(两个不同的公司可能开发处具有相同名称的程序集,如果将相同名称的程序 集放置到同一个目录下,则会出现程序集覆盖现象,最后安装的程序集会覆盖前面的程序集,从而可能导致应用序不能正常运行)。由此看来,仅靠名称来区分程序 集是不足够的。CLR采取了强命名程序集的方式来唯一的表示程序集。强命名程序集包含四个标识:名称,版本号,语言文化标识和一个共有/私有密钥对。两种 程序集/两种部署方式:.Net支持两种程序集:弱命名程序集和强命名程序集(注:.Net框架中没有弱命名程序集,只是为了和强命名程序集相对应而 已)。弱命名程序集和强命名程序集在结构上是相同的。他们都采用PE文件格式,包含PE表头,CLR表头,元数据和清单表。区别在于:强命名程序集拥有一 个发布者的公钥/私钥签名对,他们用于唯一的标识程序集的发布者。通过公钥/私钥对,我们可以对程序集进行唯一的标识,安全策略和版本策略。 AssemblyInfo.cs主要用来设定生成的有关程序集的常规信息dll文件的一些参数 生成dll文件以后再点击右键看看它的属性,你就为在里面看到熟悉的内容了 Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1467072 Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1642337 sn -k 文件名.snk(在dos下) |
数字签名文件(.SNK)
2006-12-06 14:32