强名称程序集

共享程序集必须是强名称的,所以这里简单介绍下它的机理。

 

不对称密码术: 包含公钥/私钥对,即 由私钥加密的数据内容,只有该配对的公钥才可解密。.NET强名称程序集对此

的应用:进行数字签名,并解密。可通过.NET提供的SDK工具sn,来制造新的公钥/私钥对。如:sn -k mykey.snk

 

数字签名: 散列编码程序集内容,结果大约几百字节。用私钥加密之,结果即为数字签名。

 

强命名过程: 进行 数字签名,并放入程序集中某个CLR能够访问的位置。在程序集清单中存放公钥,

                则完成了强名称的程序集命名。

 

公钥令牌: public key token,引用强名称程序集时,散列编码强名称程序集中的公钥(内容很大)为

               八字节的数值(公钥令牌),并放入自身的程序集清单中。此在compile阶段即完成。

 

共享程序集安装:共享程序集位于GAC(global assembly cache)中,XP系统中为 C:\WINDOWS\assembly。

其过程实质上是进行程序集内容的验证,如下:

1、GAC获取程序集的数字签名,并公钥解密之,得到其散列编码值

2、GAC散列编码程序集内容,并比对1结果,匹配,则安装。

 

消费程序集 载入 共享程序集 的整个过程(过程2 雷同 共享程序集安装,

绑定时做判断,主要是防止程序集于GAC中被恶意篡改),如下:

1、公钥令牌验证:CLR读取 共享程序集 的公钥,产生 公钥令牌,并比对 消费程序集 中的 公钥令牌,

                        不匹配,则CLR异常。

2、程序集内容验证:匹配,CLR对 共享程序集 进行 数字签名,并比对 共享程序集 中已存在

                       (命名阶段嵌入进去的)的 数字签名,匹配,则加载,否则CLR异常。


延迟加载: 强命名时,不进行数字签名,仅预留数字签名的空间,并于manifest中包括公钥(这样引用程序集

则可产生public key token,不影响程序开发)。如此的 程序集必须关闭签名验证的功能,才能进行GAC的安装

和程序集的加载,待部署时,再进行数字签名的工作。这里简单demo之,设有A.dll:

1、获取公钥/私钥对: sn -k myKey.snk

2、获取公钥/私钥对中的公钥: sn -p myKey.snk myPublicKey.snk

3、AssemblyInfo.cs文件中,打开延迟加载,并指定公钥

ContractedBlock.gif ExpandedBlockStart.gif 延迟加载
// 打开延迟加载
[assembly: AssemblyDelaySign(true)] 
// 指定公钥文件的位置
[assembly: AssemblyKeyFile("..\\..\\..\\myPublicKey.snk")]

4、关闭签名验证功能:sn -Vr A.dll (开发中关闭,因为A.dll未数字签名,仅包括公钥)

5、打开签名验证功能:sn -Vu A.dll

6、数字签名:sn -R A.dll myKey.snk

 

 

 

 

转载于:https://www.cnblogs.com/FallingAutumn/archive/2008/07/28/1252148.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值