首页 / 软件开发 / .NET编程技术 / CLR笔记:3.共享程序集合强命名程序集
CLR笔记:3.共享程序集合强命名程序集2011-10-26 博客园 包建强3.1 两种程序集,两种部署CLR有两种程序集,弱命名程序集和强命名程序集,二者基本一样,区别:强命名程序集时用发布者的 公钥/私钥对 进行了签名,唯一性的标识了程序集的发布者。弱命名程序集只能私有部署,强命名程序集 可以使用全局部署,也可以私有部署。3.2 为程序集指派强名称一个强命名的程序集包括4部分重要属性,标志唯一:一个无扩展名的程序集,一个版本号,一个语言 文化标志,一个公钥publickey。此外,还使用发布者的私钥进行签名MyTypes,Version=1.0.8123.0,Culture=neatral,PublicKeyToken=xxxxxxxxxxxxxxxx(公钥标记)MS使用公钥/私钥加密技术,这样,没有两家公司有相同的公钥/私钥对(除非他们共享公钥/私钥对)。使用反射获取强命名程序集的PublicKeyToken创建强命名程序集的步骤:1.生成公钥/私钥对:使用SN命令,这个命令所有开关都区分大小写SN -k MyCompany.keys——这里MyCompany.keys是创建的文件名2.将原有程序集升级为强命名程序集csc /keyfile:MyCompany.keys app.cs——这里,app.cs是包含清单表的文件,不能对不包含清单表的文件签名。C#编译器会打开MyCompany ,使用私钥对程序集进行签名,并在清单中嵌入公钥。用私钥签名一个文件:是指生成一个强命名程序集时,程序集的FileDef清单中列出了包含的所有本件 ,将每个文件名称添加到清单中,文件的内容都会根据私钥进行哈希处理,得到的哈希值与文件名一起存 入FileDef中。这个哈希值称为RSA数字签名。最终,生成的包含清单的PE32文件,其中会含有RSA数字签名和公钥补充1:签名默认使用SHA-1算法,也可以使用别的算法,通过AL命令的/algid开关指定。补充2,还可以使用SN命令,在原有基础上,得到只含公钥的文件并显示:SN -p MyCompany.keys MyCompany.PublicKey——这里MyCompany.PublicKey是创建的公钥文件名SN -pt MyCompany.PublicKey——显示公钥与公钥标记补充3:在IL中,Local对应于Culture补充4:公钥标记是公钥的最后8个字节。AssemblyRef中存的是公钥标记,AssemblyDef存的是公钥。