• 强名称程序集


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

    不对称密码术: 包含公钥/私钥对,即 由私钥加密的数据内容,只有该配对的公钥才可解密。.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文件中,打开延迟加载,并指定公钥

    延迟加载

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

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

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

  • 相关阅读:
    设计模式学习系列3 观察者模式
    设计模式学习系列2 面向对象的5大原则(转)
    设计模式学习系列1 单例模式
    又见到面试的毕业生
    猎头给我打电话
    DirectX基础学习系列8 渐进网格以及外接体
    directX基础学习系列7 网格(自己创建)
    DirectX 基础学习系列6 字体
    语艺杂谈1 – MAP赋值与插入
    DirectX基础学习系列5 融合技术
  • 原文地址:https://www.cnblogs.com/FallingAutumn/p/1252148.html
Copyright © 2020-2023  润新知