使用sn.exe为程序集签名】的更多相关文章

前言 在写上一篇随笔时,为理解EF事务底层的原理,我去Github上把EF的源码下载放到自己项目调试,不过在编译时遇到了下面这个报错信息.经过一番查阅,了解到了程序集签名(也称强名称签名)的概念.报错信息正是dll缺少签名,需要重新签名,这里记录一下我当时的操作. 错误 CS7032 Key file 'EcmaPublicKey.snk' is missing the private key needed for signing EntityFramework CSC 1 对程序集签名 1.创…
阐述签名工具这个概念之前,我先说说它不是什么: 1.它不是用于给程序集加密的工具,它与阻止Reflector或ILSpy对程序集进行反编译一毛钱关系都没有. 2.它很讨厌人们把它和加密联系在一起. 我再说说它是什么: 1.起个大名字 sn是strong name的缩写,正如其名,sn.exe的目的是给程序集起一个唯一的名字(Hash+name+version+culture),即签名,保证不会让两个不同的DLL重名(就跟身份证不能重一样) 2.让调用者识别被调用的DLL是否被篡改 这一点是我重点…
.Net 程序集 签名工具sn.exe 密钥对SNK文件 最基本的用法 阐述签名工具这个概念之前,我先说说它不是什么: 1.它不是用于给程序集加密的工具,它与阻止Reflector或ILSpy对程序集进行反编译一毛钱关系都没有. 2.它很讨厌人们把它和加密联系在一起. 我再说说它是什么: 1.起个大名字 sn是strong name的缩写,正如其名,sn.exe的目的是给程序集起一个唯一的名字(Hash+name+version+culture),即签名,保证不会让两个不同的DLL重名(就跟身份…
阐述签名工具这个概念之前,我先说说它不是什么: 1.它不是用于给程序集加密的工具,它与阻止Reflector或ILSpy对程序集进行反编译一毛钱关系都没有. 2.它很讨厌人们把它和加密联系在一起. 我再说说它是什么: 1.起个大名字 sn是strong name的缩写,正如其名,sn.exe的目的是给程序集起一个唯一的名字(Hash+name+version+culture),即签名,保证不会让两个不同的DLL重名(就跟身份证不能重一样) 2.让调用者识别被调用的DLL是否被篡改 这一点是我重点…
Sn.exe(强名称工具) .NET Framework 4.5   强名称工具 (Sn.exe) 有助于使用强名称对程序集进行签名. Sn.exe 提供了用于密钥管理.签名生成和签名验证的选项. 强名称工具自动随 Visual Studio 一起安装. 若要启动该工具,请使用 Visual Studio 命令提示.  说明 在 64 位计算机上,既可以使用 Visual Studio 命令提示符运行 Sn.exe 的 32 位版本,也可以使用 Visual Studio x64 Win64 命…
在"C#程序集系列08,设置程序集版本"中体验了为程序集设置版本,但对于程序集的安全性来说,还远远不够.本篇体验程序集的签名. □ 程序集的签名 →F盘as文件夹下有多个文件→在程序集所在文件夹创建密匙→打印密匙密匙是一堆乱码,这是经过加密了.→在密匙的基础上创建公匙Public Key→打印公匙Public Key注意:这里的public token是public key经过哈希算法而获得的.当程序集被引用,该程序集对外是以public token形式存在的. →现在重新编译&quo…
Visual Studio 内置 Strong Name Tool, 我们直接运行"VS开发人员命令提示"就可以生成秘钥文件. 秘钥文件包含公钥和私钥. 来看这个例子: 在文件夹下 D:\friend assembly\friend signed 新建一个秘钥文件,生成秘钥文件的位置可以自己定. 1. 运行"VS开发人员命令提示"命令行 2. 输入命令行 sn -k FriendAssemblies.snk (.snk为秘钥文件格式) 3. 把公钥从秘钥文件里分离出…
项目中误删了.pfx证书文件,导致项目无法启动. 以为很快就能在网上找到解决方案,应该没关系,不过找了半个小时,都没有有效的解决办法,搜出来很多.pfx文件是一个证书文件,里面存储公钥和私钥,对于我要项目运行起来的目标还没有帮助. 后来自己老老实实在项目中一个属性一个属性扒拉,终于在 项目=>属性=>签名 这个页面里看到"为程序集签名",去掉勾选项目就可以运行了,如果需要再次签名,由于我不知道密码是什么,所以选择强名称密钥文件下拉框重新新建一个证书文件(记得记录密码). 问…
CLR用数字签名的方式防止程序集发布后被人篡改,也可以确定发布人,这个方法就是使用公/私钥对,然后对程序集所有模块取一个哈希生成一个数字签名放在程序集的元数据中. 1.创建公/私钥对     创建公/私钥对有两种方式,一种是通过Visual Studio 命令提示框执行sn -k 密钥.snk方式创建私钥文件:(Visual Studio 命令提示框 最好以管理员方式打开) 第二种是在VS中,在创建的项目名称上右键,打开属性窗口,找到签名栏. 创建出的私钥里包含了公钥和私钥信息,其中私钥436个…
强命名程序集的一个好处是防篡改.假如我有一个程序集MyDll.dll,如果我用我自己的私钥进行签名将程序集中的内容进行哈希处理,其他人如果不知道我的私钥的话,就不能篡改我的这个程序集进行某些恶意的行为.但对于一些大型程序的开发,私钥一般是不公开的,当然,与它匹配的公钥是公开的,可以自由分发.那么如何确保开发人员在开发的过程中使用强命名程序集(如希望将其放到GAC中,因此必然得是强命名程序集).延迟签名就是为此目的.仍以MyDll.dl为例:1)生成公钥/私钥对    sn -k Company.…
不要在普通的命令行窗口中编译,请先打开C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Microsoft Visual Studio 2010\Visual Studio Tools路径下的Visual Studio 命令提示(2010),在该窗口中输入命令. 生成一个公钥/私钥对:SN -k 生成文件名(.snk) 创建一个只包含公钥的文件SN -p 公钥/私钥对文件(.snk) 生成文件名(.PublicKey) 查看公钥SN -tp…
原文 利用Mono.Cecil动态修改程序集来破解商业组件(仅用于研究学习) Mono.Cecil是一个强大的MSIL的注入工具,利用它可以实现动态创建程序集,也可以实现拦截器横向切入动态方法,甚至还可以修改已有的程序集,并且它支持多个运行时框架上例如:.net2.0/3.5/4.0,以及silverlight程序 官方地址:http://www.mono-project.com/Cecil 首先,我先假想有一个这样的商业组件,该组件满足了以下条件: 1. 该程序集的代码被混淆过了 2. 该程序…
下面的例子演示了创建签名程序集和有元程序集.这就要求两个程序集都是强命名,在下面的例子中,两个程序集都用了同一个秘钥,也可以用不同的秘钥. 1. 生成秘钥, 这个在前面的博客中有说明,生成秘钥文件sn.exe. 得到了公钥密码,如图 2. 创建C#文件,friend_signed_A.代码应用InternalsVisibleToAttribute 声明 friend_signed_B为有元程序集.这时要把公钥加进代码中. using System.Text; using System.Threa…
引用:  http://www.cnblogs.com/cpcpc/archive/2011/01/17/2123086.html 强名称是由程序集的标识加上公钥和数字签名组成的.其中,程序集的标识包括简单文本名称.版本号和区域性信息(如果提供的话).强名称是使用相应的私钥,通过程序集文件(包含程序集清单的文件,并因而也包含构成该程序集的所有文件的名称和散列)生成的.Microsoft® Visual Studio® .NET 和在 .NET Framework SDK 中提供的其他开发工具能够…
转自:http://www.cnblogs.com/luminji/archive/2010/10/21/1857339.html 什么是程序集 程序集标识属性 强名称的程序集 强名称工作原理 配置文件 使用 DEVPATH 查找程序集 指定要使用的运行库版本 Appconfig和YourSoftexeconfig   本章概要: 1:什么是程序集 2:程序集标识属性 3:强名称的程序集 3.1:强名称工作原理 4:配置文件 5:使用 DEVPATH 查找程序集 6:指定要使用的运行库版本 7:…
强名称签名的方法: 强签名: 1. 可以将强签名的dll注册到GAC,不同的应用程序可以共享同一dll. 2. 强签名的库,或者应用程序只能引用强签名的dll,不能引用未强签名的dll,但是未强签名的dll可以引用强签名的dll. 3. 强签名无法保护源代码,强签名的dll是可以被反编译的. 4. 强签名的dll可以防止第三方恶意篡改. 强签名的方法: 1. 有源代码: 1.1 使用vs tool command:snk –k mykey.snk 生成签名公钥. 1.2 将公钥加入项目中,并设置…
使用gacutil.exe工具安装:gacutil -i "要注册的dll文件全路径" "gacutil.exe”工具为.NET自带工具 ,需要注意的是:这个工具在.NET Framework 运行时中并不包含.他是SDK的一部分. 例如在 .NET Framework 2.0 时,我们就要单独下载 .NET Framework 2.0 SDK,或者装了 Visual Studio 后才会具有这个工具. 在开始运行中输入"cmd”进入命令窗口,通过CD选择到&quo…
1. 背景 最近在研究DotNetOpenAuth——OAuth的一个.NET开源实现,官方网站:http://dotnetopenauth.net/ . 从GitHub签出DotNetOpenAuth的源代码发现最新版本已到5.1,而NuGet中发布的版本只是4.3.新版中使用到了.NET 4.5的异步特性(async, await),于是决定直接用最新版. 用最新版,就要自己进行编译.用Visual Studio 2012打开解决方案文件进行编译,一次编译成功,但编译出的DotNetOpen…
如何:创建签名的友元程序集(C# 和 Visual Basic) Visual Studio 2013    本示例演示了如何将友元程序集和具有强名称的程序集一起使用. 这两种程序集必须都使用强名称. 尽管本示例中的两种程序集使用了相同的密钥,但您可以对这两种程序集使用不同的密钥. 在 Visual Studio 中创建签名的程序集和友元程序集 打开 Visual Studio 命令提示. 使用强名称工具,通过以下命令序列生成 keyfile 并显示其公钥. 有关更多信息,请参见Sn.exe(强…
如果你想去除一个程序集的强签名(strong name),目前为止可以有两个途径 1  反编译为IL代码,删除签名部分,再编译为程序集 2  应用Re-Sign程序,直接对一个程序集再签名 生成和读取强命名 先来看,如何生成.NET的签名文件,调用命令SN传入参数. 下面的代码读取该文件, FileStream keyPairFile = File.OpenRead("key.sn"); this.byte_2 = new StrongNameKeyPair(keyPairFile).…
要想得到强签名的dll有两种情况: 1.给项目添加强命名 在你的项目右键->属性->签名,勾选“为程序集签名”,新建 或 浏览已经新建过的.pfx文件,然后重新build项目,生成的dll就是强命名的dll了. 2.直接给dll强命名 运行vs自带的命令提示工具,执行 sn -k [文件名].snk 命令创建snk文件(其中[文件名]你自己命名,可以包含路径): 使用ildasm **.dll /out:**.il 将dll生成中间语言文件 再使用ilasm **.il /dll /key=[…
强签名: 1. 可以将强签名的dll注册到GAC,不同的应用程序可以共享同一dll. 2. 强签名的库,或者应用程序只能引用强签名的dll,不能引用未强签名的dll,但是未强签名的dll可以引用强签名的dll. 3. 强签名无法保护源代码,强签名的dll是可以被反编译的. 4. 强签名的dll可以防止第三方恶意篡改. 强签名的方法: 1. 有源代码: 1.1 使用vs tool command:snk –k mykey.snk 生成签名公钥. 1.2 将公钥加入项目中,并设置项目属性,设置签名公…
CLR在加载程序集的时候会查看程序集清单,程序集清单包含哪些内容呢?可执行文件和程序集有什么区别/ 程序集清单 □ 查看程序集清单 →清空F盘as文件夹中的所有内容→创建MainClass.cs文件→把MainClass.cs编译成程序集→反编译MyDll.dll,在1.txt文件中呈现 ildasm /out:1.txt MyDll.dll →打开1.txt文件 1.txt // Metadata version: v4.0.30319 .assembly extern mscorlib {…
要想得到强签名的dll有两种情况: 1.给项目添加强命名 在你的项目右键->属性->签名,勾选"为程序集签名",新建 或 浏览已经新建过的.pfx文件,然后重新build项目,生成的dll就是强命名的dll了. 2.直接给dll强命名 运行vs自带的命令提示工具,执行 sn -k [文件名].snk 命令创建snk文件(其中[文件名]你自己命名,可以包含路径): 使用ildasm **.dll /out:**.il 将dll生成中间语言文件 再使用ilasm **.il /…
from:http://www.mzwu.com/article.asp?id=3741 itHub下载Enyim项目,编译后引用程序运行出错: 引用内容 未能加载文件或程序集“Enyim.Caching, Version=1.0.0.0, Culture=neutral, PublicKeyToken=cec98615db04012e”或它的某一个依赖项.强名称验证失败. 既然是强名称的原因,不给程序集签名就好了.打开Enyim.Caching项目属性,不勾选为程序集签名: 编译引用,问题依旧…
最近在对AppDomain编程时遇到了一个问题,卸载AppDomain后,在内存中还保留它加载的DLL的数据,所以即使卸载掉AppDomain,还是无法更新它加载的DLL.看来只有关闭整个进程来更新DLL了. -------------------------------------------------------------------------------------------------------------- 我们知道,进程是操作系统用于隔离众多正在运行的应用程序的机制.在.N…
在书中,这一章节的开头说的是自定义命名空间和使用命名空间,在以我目前有限的经验来说,程序集就是一个类库经过编译之后,所生成的一个在引用命名空间,进而使用该文件中已经定义好的字段,属性以及方法的文件,以.dll作为后缀名.这也是为什么在书本的开头就是以命名空间入手.那么什么是命名空间,最直观的方法就是去定义一个类,在类的内部你会发现,总有一个namespace关键字,后面还会跟随一个字符串作为名称,这个名称就是命名空间的名字,也就是接下来我们所要说的程序集的名称,我们先说说命名空间,在接下来说程序…
嘴上不说 心里却想MD 这家伙在博客园装了这么久的高手 竟然连这都不会 ,我去噢. 程序集签名 .net 下 “程序集” 什么东东 ,反正就是听着挺牛x的,其实就是指“一堆程序”从我们传统的C++封装的dll 认知 就是一个dll文件名 然后一个lib文件里面有对应的函数列表,把lib文件添加进去就OK了. 呐 现在我们来新建一个空白Asp.net网站打开web.config 里面就有一些默认引用的程序集 <assemblies> <add assembly="System.C…
一.程序集的一些基本概念: 程序集是包含一个或多个类型定义文件和资源文件的集合.它允许我们分离可重用类型的逻辑表示和物理表示. 程序集是一个可重用.可实施版本策略和安全策略的单元.它允许我们将类型和资源划分到不同的文件中,这样程序集的使用者便可以决定将哪些文件打包在一起部署.一旦CLR加载了程序集中包含清单的那个文件,它就可以确定程序集的其他文件中哪些包含了程序正在引用的类型和资源.任何程序集的使用者仅需要知道包含清单的文件名称.文件的划分对使用者是透明的,并且可以在将来改变,同时又不会破坏现有…
1. 概述 本章将介绍 什么是程序集.如何强命名程序集.如何把程序集放入GAC.程序集版本 以及 WinMD程序集. 2. 主要内容 2.1 什么是程序集 程序集(Assembly)概念的出现,是为了解决COM时代的各种问题的. ① 程序集是自包含的.不需要写入注册表或其他位置. ② 程序集是语言无关的.由中间语言组成,可以被.net支持的各种语言编写的程序使用. ③ 程序集支持多个版本. ④ 程序集支持简单拷贝的发布方式. 2.2 强命名程序集 CLR支持两种类型的程序集:强命名程序集 和 常…