随笔 - 0  文章 - 19 评论 - 1 阅读 - 55884
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

分析:

软件版本和强签名的问题。

强名称是由程序集的标识、公钥和数字签名等信息组成的,其中程序集的标识包括简单文本名称、版本号、区域性信息等。这些信息都在被包含的程序集清单之中。相对于强签名程序集,弱签名程序集拥有完全一样的元数据、CLR文件头和程序集清单,惟一不同的是弱签名程序集不能进行数字签名,且没有公钥。弱签名程序集只能进行私有部署,不能被放入全局程序集缓存(GAC)中。 

注意:在现代密码体制中,加密和解密一般采用非对称密钥密码系统,也就是不同的密钥(公开密钥)。这样每个通信方均需要2个密钥,即公钥和私钥,这2把密钥可以互为加解密。公钥是公开的,不需要保密,而私钥是由个人持有,并且必须注意保密、妥善保管。 

当在.NET中创建一个强签名时,依据加密机制,其公钥将被添加到程序清单之中。同时,在发布(Publish)程序集时,同时生成一个数字签名,这个数字签名包含了程序集清单的散列值,而程序集清单又包含了当前程序集中的所有模块的散列值。在这种情况下,只有拥有程序集的公钥和私钥,才可以对程序集做修改。因此在强签名程序集中,数字签名和公钥一起实现了对程序集的保护。

强签名有2个作用:

(1)惟一标识程序集,防止程序集重名。

(1)保护程序集,防止被非法篡改。 

下面以C#的编译器csc.exe为例说明如何生成一个强命名的程序集。首先,需要为新的强命名程序集准备一对惟一的公钥/私钥。.NET Framework提供了一个很实用的工具sn.exe。

打开一个VS2008的命令台,如图2.2所示。

 

图2.2  打开命令台

 

当进入控制台界面时,输入下面这条命令:

sn –k C:\Public_Private_Key.snk

屏幕呈现图2.3所示控制台界面:

 

图2.3  控制台

sn.exe将在C盘根目录下生成一个Public_Private_Key.snk文件。用户可以控制sn.exe的输入参数来得到公钥或者实现其他功能。准备好了公钥/私钥对,笔者将开始创建一个强命名的程序集。打开命令台并且进入HelloKitty.cs所在的目录,输入以下命令: 

//首先进入HelloKitty.cs所在的目录

cd E:\WebTemp\nunit\MyConsole

//然后将前面生成的Public_Private_Key.snk也copy到HelloKitty.cs所在的目录

//运行下面的命令就生成一个HelloKitty.dll

csc.exe /t:library HelloKitty.cs /keyfile:Public_Private_Key.snk

这样,一个名为HelloKitty.dll的强命名程序集就被生成了。

总结: 

可利用强签名进行源代码的保护和版本间的维护。强签名的原理是不对称签名验证算法。生成强签名需要借助.NET Framework提供的sn.exe和csc.exe这2个工具。在.NET的命令台调用sn..exe,生成一个后缀名为.snk的公钥/私钥,运行csc.exe即可以生成一个强签名的程序集。

posted on   IamScree  阅读(1597)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示