一听到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,找到项目,然后右击"项目名"找到"属性","属性"里面有个"签名"的选项卡,然后钩上
"为程序集签名",再"选择强名称密钥文件".做完了操作,然后记得保存,编译

==================================

snk文件在.net里面被用作存放密钥或密钥对的存储文件,生成密钥对snk文件可以用.net中的sn.exe命令,如“sn   -k   keyPair.snk”。   
  snk本身只是用来存放非对称密钥的,但在各个需要用到加密、签名的地方都可以使用:   
  1) 用snk文件生成强命名程序集,这样一个assembly才可以被赋予full-trust属性,也可以被添加到GAC中。在VS.NET中生成 strong-named   assembly,只需要在AssemblyInfo.cs里面添加一下代码并编译即可:

[assembly:   AssemblyDelaySign(false)]   
  [assembly:   AssemblyKeyFile("..\\..\\keyPair.snk")]   
  [assembly:   AssemblyKeyName("")]

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

AssemblyInfo.cs主要用来设定生成的有关程序集的常规信息dll文件的一些参数
请看以下具体说明:
//备注: 
[assembly:AssemblyDescription("用最强的抢劫类写成!")]
//产品名称
[assembly:AssemblyProduct("无为搜索")]
//公司
[assembly:AssemblyCompany("无为网络")]
//合法商标
[assembly:AssemblyTrademark("无为")];
//内部名称
[assembly:AssemblyCulture("")]
//设计者
[assembly:AssemblyDescription("无为类库")]
//版权
[assembly:AssemblyCopyright("")]
//配置文件
[assembly:AssemblyConfiguration("Configuration")]
//产品版品: 可指定,如下
// 程序集的版本信息由下列 4 个值组成:
//
//      主版本
//      次版本
//      内部版本号
//      修订号
//
// 您可以指定所有这些值,也可以使用“修订号”和“内部版本号”的默认值,方法是按
// 如下所示使用 '*':
[assembly:AssemblyVersion("1.0.*")]

生成dll文件以后再点击右键看看它的属性,你就为在里面看到熟悉的内容了

转载于:https://www.cnblogs.com/pctzhang/archive/2011/10/13/2209967.html

密钥文件snk 、AssemblyInfo.cs相关推荐

  1. AssemblyInfo.cs文件中的程序集属性

    AssemblyInfo.cs一般的由VS自动生成,用于描述程序集的属性.必要时我们可以修改此文件,增加或者修改描述程序集的属性,VS会为每一个新建的程序集创建默认的AssemblyInfo.cs来保 ...

  2. AssemblyInfo.cs文件:包含程序版本、信息、版权的属性文件(转转转)

    AssemblyInfo.cs文件:包含程序版本.信息.版权的属性文件 先介绍AssemblyInfo.cs文件中的程序集属性 内容: using System.Reflection; using S ...

  3. C# AssemblyInfo.cs文件的作用

    C# AssemblyInfo.cs主要用来设定生成的有关 程序集的常规信息dll文件的一些参数 请看以下具体说明: //标题:  [assembly:AssemblyTitle("编程论坛 ...

  4. AssemblyInfo.cs文件详解

    1..Net工程的Properties文件夹下自动生成一个名为AssemblyInfo.cs的文件,一般情况下我们很少直接改动该文件.但我们实际上通过另一个形式操作该文件.那就是通过在鼠标右键点击项目 ...

  5. AssemblyInfo.cs文件的作用

    来自csdn(fkphp) AssemblyInfo.cs主要用来设定生成的有关程序集的常规信息dll文件的一些参数 请看以下具体说明: //备注: [assembly:AssemblyDescrip ...

  6. C# 更新AssemblyInfo.cs的文件版本号(AssemblyFileVersion)

    最近由于单位发布测试密度较大,因此手动更新每个程序集([assembly: AssemblyFileVersion("1.0.0.0")])的版本号,成了很头痛的事情,因此想着能自 ...

  7. cs项目服务器更新,Visual Studio下运行PowerShell脚本自动更新项目里AssemblyInfo.cs文件的版本(自增小版本号)并发布到Nuget服务器上...

    Visual Studio下运行PowerShell脚本自动更新项目里AssemblyInfo.cs文件的版本(自增小版本号)并发布到Nuget服务器上 附脚本[ update.ps1文件内容]: $ ...

  8. AssemblyInfo.cs文件的作用(转)

    AssemblyInfo.cs主要用来设定生成的有关程序集的常规信息dll文件的一些参数 请看以下具体说明: //备注:  [assembly:AssemblyDescription("用最 ...

  9. C#中AssemblyInfo.cs文件详解

    1..Net工程的Properties文件夹下自动生成一个名为AssemblyInfo.cs的文件,一般情况下我们很少直接改动该文件.但我们实际上通过另一个形式操作该文件.那就是通过在鼠标右键点击项目 ...

  10. AssemblyInfo.cs文件

    .Net魔法堂:AssemblyInfo.cs文件详解 一.前言 .net工程的Properties文件夹下自动生成一个名为AssemblyInfo.cs的文件,一般情况下我们很少直接改动该文件.但我 ...

最新文章

  1. golang 反射 获取 设置 结构体 字段值
  2. 关于Advertising Campaign
  3. mysql idle_MySQL常用指令
  4. 转 : 深入解析Java锁机制
  5. spinner的理解
  6. 深圳学校积分计算机,深圳小学入学积分多少才够
  7. 408. Valid Word Abbreviation
  8. ssh-keygen实现免密码登陆
  9. Palindromic Twist(CF-1027A)
  10. 苹果正在训练Siri 未来或将更好理解口吃用户
  11. 使用Firebase、Angular 8和ASP.NET Core 3.1保护网站安全
  12. 环形博弈 HDU - 3951
  13. 鼠标控制程序,按住shift显示S,按住Ctrl显示C,按键盘显示D,松开键盘显示U
  14. Oracle树结构查询按层级排序
  15. marlab中主成分得分怎么求_PCA(主成分分析) 和 SVD (奇异值分解)
  16. 【动画演示软件】Focusky教程 | 如何隐藏某帧的内容,使其在演示时才出现?
  17. R查看和更改工作路径的命令
  18. php fatal 和php error,从PHP Fatal error: Uncaught Error: Class '' not found in php:说起
  19. cad导入新的线型、填充图案、字体压缩包
  20. kermit配置文件

热门文章

  1. python重启电脑
  2. UnityECS-初识
  3. 酷比魔方iPlay40刷Magisk+Root教程
  4. swf游戏保存进度_swf游戏
  5. 打印系统开发(6)——纸张尺寸对照表如下
  6. CATIA二次开发:工程图中文本的遍历和修改
  7. Antismash-BigScape次级代谢基因簇鉴定
  8. vue admin html,vue-admin-template笔记(六)
  9. 数据库和 MIDP,第一部分:了解记录管理系统
  10. Matlab 划分网格,三维曲面,网格划分好之后还需要提取网格上的每个点的位置坐标,之后需要用这些点的坐标进行运算。望各位大佬解惑,感激不尽