SNK,作为程序后缀的时候,是.net中的强密匙加密文件
2012-11-21 13:54
281 查看
当你把一个程序集放进GAC(全局程序集缓存)时,就要加强名(也就是签名),在GAC中的程序集可以被所有程序引用访问(相当于以前COM组件在注册表里注册一样),如果不放进GAC,刚所有使用这个程序集都要复制这个程序集(也就是私有程序集),所以用不用强名要看情况而定.
如果不是 要把.dll共享 可以不使用强名
强名称是为了你的Dll文件的安全,一般我们的dll文件,随便在哪只要引用就可以用
但如果用了强名称的话,dll 就会有一个秘钥,其它人就不能引用了
如何创建带有强名称的程序集
可以向程序集分配称为强名称的加密签名,它为程序集提供名称的唯一性并防止他人借用您的程序集名称(名称欺骗)。如果您正在部署一个将被同一台计算机上的多个应用程序共享的程序集,则该程序集必须有强名称。即使只在您的应用程序中使用该程序集,使用强名称也可确保加载该程序集的正确版本。
生成具有强名称的程序集的第一步是获得加密密钥对。.NET Framework SDK 包括一个可用来生成密钥对的“强名称”工具 (Sn.exe)。由“强名称”工具生成的密钥对可以保留在文件中,您也可以将它存储在本地计算机的“加密服务提供程序”(CSP) 中。下面的命令使用“强名称”工具生成一个新的密钥对并将它存储在名为 TestKey.snk 的文件中:
sn -k Testkey.snk
在获得密钥对后,需要向源文件中添加正确的自定义属性,以便编译器发出带有强名称的程序集。根据用于签名的密钥对是包含在文件中还是 CSP 内的密钥容器中,正确地选择属性。对于存储在文件中的密钥,请使用 System.Reflection.AssemblyKeyFileAttribute。对于存储在 CSP 中的密钥,请使用 System.Reflection.AssemblyKeyNameAttribute。
(*) 如果未指定密钥,则程序集不会被签名。
// (*) KeyName 是指已经安装在
// 计算机上的加密服务提供程序(CSP)中的密钥。KeyFile 是指包含
// 密钥的文件。
// (*) 如果 KeyFile 和 KeyName 值都已指定,则
// 发生下面的处理:
// (1) 如果在 CSP 中可以找到 KeyName,则使用该密钥。
// (2) 如果 KeyName 不存在而 KeyFile 存在,则
// KeyFile 中的密钥安装到 CSP 中并且使用该密钥。
// (*) 要创建 KeyFile,可以使用 sn.exe(强名称)实用工具。
// 在指定 KeyFile 时,KeyFile 的位置应该
// 相对于“项目输出目录”。项目输出
// 目录的位置取决于您是在使用本地项目还是 Web 项目。
// 对于本地项目,项目输出目录定义为
// <Project Directory>\obj\<Configuration>。例如,如果 KeyFile 位于该
// 项目目录中,应将 AssemblyKeyFile
// 属性指定为 [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]
// 对于 Web 项目,项目输出目录定义为
// %HOMEPATH%\VSWebCache\<Machine Name>\<Project Directory>\obj\<Configuration>。
在编译的时候可以作为.dll文件的key,如果你用其他*.snk文件代替原来的文件,.dll是无法编译的
如果不是 要把.dll共享 可以不使用强名
强名称是为了你的Dll文件的安全,一般我们的dll文件,随便在哪只要引用就可以用
但如果用了强名称的话,dll 就会有一个秘钥,其它人就不能引用了
如何创建带有强名称的程序集
可以向程序集分配称为强名称的加密签名,它为程序集提供名称的唯一性并防止他人借用您的程序集名称(名称欺骗)。如果您正在部署一个将被同一台计算机上的多个应用程序共享的程序集,则该程序集必须有强名称。即使只在您的应用程序中使用该程序集,使用强名称也可确保加载该程序集的正确版本。
生成具有强名称的程序集的第一步是获得加密密钥对。.NET Framework SDK 包括一个可用来生成密钥对的“强名称”工具 (Sn.exe)。由“强名称”工具生成的密钥对可以保留在文件中,您也可以将它存储在本地计算机的“加密服务提供程序”(CSP) 中。下面的命令使用“强名称”工具生成一个新的密钥对并将它存储在名为 TestKey.snk 的文件中:
sn -k Testkey.snk
在获得密钥对后,需要向源文件中添加正确的自定义属性,以便编译器发出带有强名称的程序集。根据用于签名的密钥对是包含在文件中还是 CSP 内的密钥容器中,正确地选择属性。对于存储在文件中的密钥,请使用 System.Reflection.AssemblyKeyFileAttribute。对于存储在 CSP 中的密钥,请使用 System.Reflection.AssemblyKeyNameAttribute。
(*) 如果未指定密钥,则程序集不会被签名。
// (*) KeyName 是指已经安装在
// 计算机上的加密服务提供程序(CSP)中的密钥。KeyFile 是指包含
// 密钥的文件。
// (*) 如果 KeyFile 和 KeyName 值都已指定,则
// 发生下面的处理:
// (1) 如果在 CSP 中可以找到 KeyName,则使用该密钥。
// (2) 如果 KeyName 不存在而 KeyFile 存在,则
// KeyFile 中的密钥安装到 CSP 中并且使用该密钥。
// (*) 要创建 KeyFile,可以使用 sn.exe(强名称)实用工具。
// 在指定 KeyFile 时,KeyFile 的位置应该
// 相对于“项目输出目录”。项目输出
// 目录的位置取决于您是在使用本地项目还是 Web 项目。
// 对于本地项目,项目输出目录定义为
// <Project Directory>\obj\<Configuration>。例如,如果 KeyFile 位于该
// 项目目录中,应将 AssemblyKeyFile
// 属性指定为 [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]
// 对于 Web 项目,项目输出目录定义为
// %HOMEPATH%\VSWebCache\<Machine Name>\<Project Directory>\obj\<Configuration>。
在编译的时候可以作为.dll文件的key,如果你用其他*.snk文件代替原来的文件,.dll是无法编译的
相关文章推荐
- Visual Studio 2017中使用正则修改部分内容 如何使用ILAsm与ILDasm修改.Net exe(dll)文件 C#学习-图解教程(1):格式化数字字符串 小程序开发之图片转Base64(C#、.Net) jquery遍历table为每一个单元格取值及赋值 。net加密解密相关方法 .net关于坐标之间一些简单操作
- 解决安装SqlServer时候,提示“以前某个程序安装时挂起了文件操作,安装程序前请重启”
- .NET下对二进制文件进行加密解密(C#)
- .NET程序不需要受SVN版本控制的文件类型
- 文件加密解密小程序
- .net程序中资源文件的保护办法探讨
- parquet文件格式——本质上是将多个rows作为一个chunk,同一个chunk里每一个单独的column使用列存储格式,这样获取某一row数据时候不需要跨机器获取
- 某壳对.Net程序加密的原理及解密探讨一
- 文件加密小程序
- 某壳对.Net程序加密的原理及解密探讨二
- win10系统获取管理员权限卸载程序、删除文件等听语音 浏览:9507|更新:2016-02-23 02:27 很多用户升级win10系统以后,发现卸载某些程序或者删除某些文件的时候,会出现权限不够,
- .net 下文件加密和解密
- Microsoft .NET StockTrader ReadMe 微软 .NET 股票交易示例程序帮助文件(中文版)
- 在vc中将文件作为资源放入程序中,根据需要再还原为文件
- 让你的.NET程序兼容不同版本的Dll文件。
- 最近成果-透明加密文件系统SDK-支持透明加密解密-手动加密解密-目录加密解密-指定进程加密-指定后缀加密-指定非法进程-锁定驱动器-支持Office文件加密解密-打开文件时加密等
- 使用APACHE部署DJANGO程序的时候如何配置静态文件支持?
- .net通过一般处理程序模拟用户控件数据保持、Ispostback 【第二版将html与ashx文件分开】
- 在.Net中嵌入资源文件到程序集中
- 如何解决:新建Android程序的时候发生了找不到 /android-sdk-windows/tools/lib/proguard.cfg文件 的错误