zoukankan      html  css  js  c++  java
  • 如何生成密钥文件Snk

       在.net中,snk用于给应用程序集签名,保证应用程序集的有效性。
       强命名程序集的缘由: 目前Windows中出现的DLL Hell问题(两个不同的公司可能开发处具有相同名称的程序集,如果将相同名称的程序 集放置到同一个目录下,则会出现程序集覆盖现象,最后安装的程序集会覆盖前面的程序集,从而可能导致应用序不能正常运行)。由此看来,仅靠名称来区分程序 集是不足够的。CLR采取了强命名程序集的方式来唯一的表示程序集。强命名程序集包含四个标识:名称,版本号,语言文化标识和一个共有/私有密钥对。两种 程序集/两种部署方式:.Net支持两种程序集:弱命名程序集和强命名程序集(注:.Net框架中没有弱命名程序集,只是为了和强命名程序集相对应而 已)。 弱命名程序集和强命名程序集在结构上是相同的。他们都采用PE文件格式,包含PE表头,CLR表头,元数据和清单表。区别在于:强命名程序集拥有一 个发布者的公钥/私钥签名对,他们用于唯一的标识程序集的发布者。通过公钥/私钥对,我们可以对程序集进行唯一的标识,安全策略和版本策略。

    VS2005中,强命名的原理
    先利用SN.exe这个工具生成一个比如 SampleKey.snk的文件,这个文件的英文原文叫string name key file,然后用加密的算法根据SampleKey.snk生成一个SampleKeyPublic.snk.最后在根据 SampleKeyPublic.snk提取一个public key token 
    ,public key token是一个16位的数字和字母混合的数(我不敢确定是不是十六进制数):大致流程如下: 

    SampleKey.snk --根据一定的算法--> SampleKeyPublic.snk---->public key token 
    所以我们只要SampleKey.snk和public key token就可以了,SampleKeyPublic.snk就没什么用了.


    实际操作如下: 
    1.打开SDK Command Prompt或者VS2005中的Visual Studio 2005 Command Prompt.而不是windows的cmd 
    2.输入sn -k SampleKey.snk,得到的文件在命令提示符的当前文件夹下(微软叫文件夹很少叫目录,最正点是folder) 
    3.输入sn -p SampleKey.snk SampleKeyPublic.snk 
    4.输入sn -t SampleKeyPublic.snk 得到public key token 

    打开VS2005,找到项目,然后右击"项目名"找到"属性","属性"里面有个"签名"的选项卡,然后钩上
    "为程序集签名",再"选择强名称密钥文件".做完了操作,然后记得保存,编译

  • 相关阅读:
    jackson自动将东八区时间转成标准时间
    开发项目和所用时间 感想
    自我介绍
    后缀数组模板
    lucas模板
    后缀数组da3模板
    cf#366....
    第1月2周1天
    第1月2周2天
    第1月1周1天
  • 原文地址:https://www.cnblogs.com/leeolevis/p/1891342.html
Copyright © 2011-2022 走看看