如何:创建公钥私钥对

如何:创建公钥私钥对,第1张

要使用强名称为程序集签名,必须具有公钥/私钥对。这一对加密公钥和加密私钥用于在编译过程中创建强名称程序集。您可以使用强名称工具 (Sn.exe)来创建密钥对。密钥对文件通常具有 .snk 扩展名。

程序集的强名就是对程序集进行私钥签名,这个私钥签名和程序集名称、程序集版本、区域信息一起构成程序集的强名。

第一个作用是区分发行者

比如

你有一个 a.dll,version=1.0.0.1,culture=de-DE

我也有一个 a.dll,version=1.0.0.1,culture=de-DE

那这两个程序集放在一起不就冲突了吗

这时候,如果我们分别对各自的程序集加上强名,那么.NET就能区分这两个程序集

第二个作用是防止程序集被篡改

不是说你加了强名,别人就不能改你的程序集。而是如果被改了,就过不了调用方的强名验证,调用方就不认这个被非法修改了的程序集。

比如有一个程序集b.dll,很多程序和其他程序集都引用了它。现在有些人处于某些目的,把这个b.dll篡改了,加上一些后门之类的东西,然后在网络上传播。如果是普通程序集,那他的目的就能够达到。但是如果程序集有强名(并且调用方都是完全限定调用的),那所有用到b.dll的代码都不认这个被非法修改过的版本。

其他一些作用是CLR在处理程序集引用时用到的。比如有强名的程序集在解析时会进行版本检查,没有强名的程序集就不进行这个检查。

有强名的程序集可以配置在任何位置,没有强名的程序集只能配置在应用程序的私有目录下

具体的去MSDN上看吧,很多,很杂又很散

了用强命名标识一个程序集,你必须拥有一对公钥和私钥。这一对公钥私钥加密密钥用作编译期间生成强命名的程序集(汇编程序).你可以使用强命名工具(Sn.exe)创建一个密钥对.密钥文件通常都具有一个.snk的文件扩展名。

●创建一个密钥对

在命令提示符下,键入以下命令:

Sn –k <file name

在此命令中,<file name是一个包含密钥对的输出文件的名字。

以下例子是创建一个名叫sgKey.snk的密钥对文件

sn –k sgKey.snk

如果你希望延迟标识程序集并且也希望控制整个密钥对(它不像外部测试情景,场景),你可以用一下命令生成一对密钥对,然后从此密钥对中提取公钥到一个单独的文件。

首先,创建密钥对:

sn –k keypair.snk

然后,从上面生成的密钥对文件(keypair.snk)中提取公钥,并拷贝到一个独立的文件中:

sn –p keypair.snk public.snk

一旦你创建了密钥对,你就必须将此文件放置在强命名标识工具能够找到它的位置。

当运用强命名标识一个程序集的时候,程序集连接器(Assembly Linker (Al.exe))会寻找与当前目录有关的密钥文件,并输出到当前目录。在使用命令行工具编译 的时候,也可以很容易的拷贝此密钥到包含代码模块的的当前目录下。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11399421.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-15
下一篇2023-05-15

发表评论

登录后才能评论

评论列表(0条)

    保存