- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
强签名程序集
通过嵌入公钥并使用私钥签名,可以生成强名称(strong name)的程序集。强名称程序集由4部分进行标识:名称、版本、区域性和公钥。与之相对的,我们可以把没有嵌入公钥和使用私钥签名的程序集称之为弱名称(weak name)程序集(这个术语是Jffery Richter创造的)。强名称程序集与弱名称程序集相比,有以下特点:
??? * 强名称程序集可以保证唯一性。公/私密钥对是由发行者自行生成的,是唯一的,保证了程序集的标识不会重复。??? * 强名称程序集可以防篡改。强类型程序集使用私钥对自己进行了签名,这样在被加载时可以检查程序集是否被修改。??? * 强名称程序集可以实施版本策略。对于弱名称程序集,引用它的程序不会关心它的版本,而对于强类型的程序集来说,引用它的程序会被绑定到特定版本的程序集上,如果使用新版本的强名称程序集替换旧版本,会导致程序无法运行。(当然还可以使用配置文件对强名称程序集进行重定向)。??? * 强名称程序集可以部署到GAC中。GAC指全局程序集缓存,这是一个公共目录,放在此处的程序集可以被本机任意一个程序所引用。弱名称程序集无法部署到此处。不同版本的相同程序集还可以同时存在于GAC中。??? * 强名称程序集只能引用强名称程序集。弱名称程序集可以引用强名称程序集,也可以引用弱名称程序集,但强名称程序集只能引用强名称程序集。??? * 强名称程序集支持并行执行。并行(side-by-side)执行是指程序同时引用了多个版本的同名程序集,这样在运行时,会有多个版本的同名程序集被加载和同时执行。通常不建议使用。
下面来研究一下如何生成强名称的程序集。首先,使用SN.exe创建一个密钥文件:
sn.exe -k MyKey.snk
生成的文件包含了公钥和私钥的内容。我们可以查看公钥的内容,私钥是不允许查看的,所以要先将公钥提取出来。仍然是使用SN.exe:
sn -p MyKey.snk MyPublicKey.snk
sn -tp MyPublicKey.snk
前一个命令将密钥文件中的公钥提取出来,放到 MyPublicKey.snk 文件中;后一个命令用于显示该文件中的公钥和公钥标记(Public key token),显示的内容可能如下(每个人生成的都不同):
Microsoft (R) .NET Framework Strong Name Utility? Version 3.5.21022.8Copyright (c) Microsoft Corporation.? All rights reserved.
Public key is0024000004800000940000000602000000240000525341310004000001000100757c8b7854ffcb4763250746c094e45db0c715214415fb01bd178f3374224c1292dbbc9dddfb6af7de17668884641a39fbea9d0bee001c093b228400aa39c0db5724fc11c221bd2c7442a30ef26c076b1bb0f559ce7955572b4174125494a593c199d968019323483e72d5bdb93d96af14ccfeb0c5d4af6ea191d226e6812db5
Public key token is 337642649f453c2c
公钥标记是公钥的64位散列值,用于简化对公钥的引用。
第二步是创建强名称程序集。我们可以在源文件中使用AssemblyKeyFileAttribute,但在编译时会产生警告,建议使用命令行选项来代替此特性。所以此处使用csc.exe:
csc /t:library /keyfile:MyKey.snk MyType.cs
运行后得到 MyType.dll ,我们可以显示其中包含的公钥标记,看是否和上面的相同:
sn -Tp MyType.dll
显示内容如下:
Microsoft (R) .NET Framework Strong Name Utility? Version 3.5.21022.8Copyright (c) Microsoft Corporation.? All rights reserved.
Public key is0024000004800000940000000602000000240000525341310004000001000100757c8b7854ffcb4763250746c094e45db0c715214415fb01bd178f3374224c1292dbbc9dddfb6af7de176688
原创力文档


文档评论(0)