zoukankan      html  css  js  c++  java
  • 强名称程序集

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

    不对称密码术: 包含公钥/私钥对,即 由私钥加密的数据内容,只有该配对的公钥才可解密。.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

  • 相关阅读:
    ASP记数器
    Photoshop压缩png图片方法之一
    Drupal的高速缓存配置APC
    各种share button
    兼容iphone、ipad与PC平台的在线视频
    知识组织方法总结
    Virtuemart2 for joomla2.5
    joomla2.5 常用组件
    网上找来经过改良的多级联动下拉菜单
    joomla组件开发中的时区问题
  • 原文地址:https://www.cnblogs.com/FallingAutumn/p/1252148.html
Copyright © 2011-2022 走看看