SNK 与PFX
snk
1用来证明这个生成的程序集是你发布的;
2如果你写的程序集要用在多个应用程序上的话,那么这个程序集必须要拥有唯一的名称,这个强名称是程序集唯一名称的一部分。
3只要你保护好你的snk文件不要公布出去,那么没有任何人可以假冒你发布程序集。
强名称签名的原理是不对称签名验证算法。
首先你用sn.exe命令行程序生成一个.snk的密钥文件,这个文件包括了两个部分的内容。
1 私钥,就是在vs.net编译的时候生成验证码的东西。
2 公钥,编译的时候打包到程序集元数据中PublicKey部分的内容。
而且,验证码只能通过私钥来生成,只有通过私钥生成的验证码才能通过.Net CLR的验证。
CLR验证程序集的时候通过读取公钥来生成验证对象,生成过后对整个程序集的内容进行验证,拿这个验证码与程序集里面的验证码对比,如果吻合就通过,如果不吻合表示程序集已经被修改了,CLR将拒绝载入这个程序集并且认为需要的程序集没有找到,抛出FileNotFoundException异常。
比如说微软的.Net类库中的System.dll、System.Web.dll等,都经过了强名称验证,保证别人只能使用这些类库,而不能修改,还保证这些程序集是微软推出的。而且,这些程序集是存放在共享目录里面的,更加需要强名称了。
创建SNK文件,2种办法
1 我们在vs.net的命令行模式(开始——〉程序——〉Microsoft Visual Studio.net 2003——〉Visual Studio.net工具——〉Visual Studio.net命令提示)里面输入:sn -k xxxx.snk
xxxx.snk就是你需要的数字签名文件。
使用: 先将snk文件存放到一文件夹(key);在AssemblyInfo.cs文件里面包含有所有版本数字和所有数字签名文件的引用。我们将修改这一文件里面的 [assembly:AssemblyKeyFile("")]为:[assembly:AssemblyKeyFile(@"\key \xxxx.snk")]
这样就完成创建。
2 在 Visual Studio 2005 中,通过 C#、Visual Basic 和 Visual J# 集成开发环境 (IDEs) 可以生成密钥对,并且无需使用 Sn.exe 创建密钥对即可对程序集进行签名。以上 IDE 在“项目设计器”中具有“签名”选项卡。生成文件pfx与snk文件一样,都可以用来给程序集加上强名称,但是pfx是在加的过程中,需要设置密码的。如果想创建SNK文件则不选“使用密码保护密钥文件”,这样会生成一个扩展名为snk的文件。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
2014-12-25 cmd下命令提示符下杀进程主要有三种方法
2013-12-25 解决 Operation must use an updateable query
2013-12-25 HTTP Error 404.2 - Not Found The page you are requesting cannot be served because of the ISAPI and CGI Restriction list settings on the Web server(转)