[ZZ]强签名的由来和作用
在网上,看到很多初学.NET的网友经常问,强签名是什么,它的作用是什么?一句话,强签名就是唯一标识一个Assembly文件的名称。它由Assembly的文件名、版本号、区域信息、公钥信息和处理器架构信息组成,这样做是为了避免以前Windows里面的DLL HELL问题。
在强名以前,如果一个DLL升级覆盖了老版本的DLL,有可能会导致系统里面一些依赖老版本的DLL程序出现兼容型的问题。这是因为新版本里面可能将老版本DLL的一些函数的实现方法改变—为了修复一些Bug,因此强签名就将程序的版本信息作为唯一标识Assembly的一部分。
而.NET又因为历史原因,在开发的时候由于PC还没有64位的处理器可以使用,因此虽然.NET程序编译成MSIL中间代码以后,CLR可以根据所运行的机器的处理器架构生成对应的代码。但是还是有一些Assembly模块是依赖于指定平台的,例如CustomMarshalers.dll,这个DLL调用了一些unsafe代码,里面有一些指针操作,因此这个dll是依赖于指定平台的。因此在2.0的.NET以后,强签名就将程序所依赖的处理器信息也作为其一部分。
另外由于很多公司都需要开发国际化软件产品,一般希望只保留一份代码,然后将代码里面用到的字符串放到其他Assembly里面 — 这个Assembly叫做资源Assembly。在代码Assembly使用字符串的时候,只要指定字符串在资源Assembly对应的标识符,在做本地化的时候,软件发布厂商只需要为需要支持的语言添加对应的资源Assembly就可以了。比如mscorlib.dll里面会扔出很多的异常,为了能为不同国家的.NET用户显示本地化的异常消息,mscorlib.dll将所有异常消息都提取到资源Assembly里面,因此你会看到系统里面安装了mscorlib.en-us.dll,mscorlib.zh-cn.dll等等。使用.NET的ResourceManager类可以根据字符串标识符将资源Assembly里面对应的字符串和其他资源(有些图片也需要本地化,例如改变图片上的文字)提取出来,因此强签名就将程序支持的区域信息作为它的一部分。
组件发布了以后,如何想其他人证明组件就是你发布的?例如在下图的例子中,张三和黑客的程序都发布给王二,两个程序都声称自己是张三提供的,王二如何区别哪个才是真的张三呢?
因此我们有了数字签名这个解决方案,在下图的例子中:
- 张三先将自己的身份和公钥注册在权威机构里面。
- 张三发送代码给用户。
- 用户去权威机构去查询张三的身份是否和他声明的相符。
- 黑客发送代码给用户。
- 用户去权威机构查处代码声明的身份和它实际的身份不符。因此就可以采取保护措施。
因此公钥作为强签名的一部分就不是很奇怪了。
转自:http://blog.csdn.net/Donjuan/archive/2009/02/02/3859136.aspx
转载于:https://www.cnblogs.com/wk23415/archive/2011/04/06/2006436.html
[ZZ]强签名的由来和作用相关推荐
- 什么是.NET 程序集强签名
http://blog.csdn.net/vipxiaotian/archive/2007/07/12/1686071.aspx 用强名称来给程序集签名即谓之程序集强签名! 那什么是强名称,签名又有什 ...
- 使用InternalsVisibleToAttribute给assembly添加“友元assembly”特性遭遇强签名
一.如何让Intenal成员暴露给另一个程序集 我们知道Modifier为Internal的类型成员仅限于当前程序集能够访问,但是在某些情况下,我们希望将它们暴露给另一个程序集.比较典型的应用场景包括 ...
- 使用MSIL 汇编程序 (Ilasm.exe) 2 强签名
在MSIL汇编程序中,原本的想法只是想告诉大家,如果遇到内部开发时,遇到没有源码的dll,怎样来修改dll中的bug,既然有朋友提到了强签名,以及破解相关的东西,那么今天就在谈一下我自己在这个过程中的 ...
- .Net程序集强签名详解
强签名: 1. 可以将强签名的dll注册到GAC,不同的应用程序可以共享同一dll. 2. 强签名的库,或者应用程序只能引用强签名的dll,不能引用未强签名的dll,但是未强签名的dll可以引用强签名 ...
- 秋天NET快速强签名工具V1.1
本款工具可针对NET库程序集等进行快速强签名,支持snk,pfx密码证书. 可用于将线程dll或程序集替换为自属证书签名,可用于解决NET未引用强签名等问题. 已集成VC2010,SDK工具,如发现电 ...
- 不能对Revit插件进行强签名
背景 最近正在研发一款Revit插件,为加强dll间引用的关联性,对发布的所有dll进行了强签名. 在Revit加载强命名的插件后,执行插件命令,程序抛出异常未能加载文件或程序集或它的某一个依赖项.需 ...
- VS源码添加程序集强签名
1.打开"开始"菜单或者右击"开始"菜单选择"搜索",在搜索栏输入"开发人员命令提示",选择"VS2015开发 ...
- 因果关系是通向强AI的阶梯or作用被夸大?
整理 | 夕颜 出品 | AI科技大本营(ID:rgznai100) 一直以来,机器学习和统计学之间的界限就比较模糊,比如诺奖得主托马斯·萨金特就曾经说过人工智能其实就是统计学,只不过用了一个很华丽的 ...
- 关于加密、签名、证书的作用及运用场景
面对MD5.SHA.DES.AES.RSA等等这些名词你是否有很多问号?这些名词都是什么?还有什么公钥加密.私钥解密.私钥加签.公钥验签.这些都什么鬼?或许在你日常工作没有听说过这些名词,但是一旦你要 ...
最新文章
- 设置腾讯云linux服务器中 MySQL 允许远程访问
- 使用VS2012进行性能测试和负载测试
- 真正的自重...小偷可以灭绝
- 一个xmltojson类
- 为什么在使用get时,Properties对象总是忽略默认值?
- 多选Select排序
- NXP UWB NCJ29D5开发(一)环境搭建
- QQ登录JS SDK教程,调用openapi接口
- 极光推送java服务器端_极光推送服务器端(JAVA)
- OC算法练习-Hash算法
- Ext 3.1版本放出,可以免费下载了
- WIN7远程桌面连接显示凭据不工作的解决方法
- 压倒eBay 挑战亚马逊 Shopify到底厉害在哪儿?
- linux mp4转h264工具,Linux音视频开发之二:转换YUY2到I420便于压缩成h264
- 运行时绘制Gizmo——关于unity3D的GL图像库的使用(非常详细)
- 我在b站学数据库 (七):多表操作
- 2020年2月编程语言排行榜:Java第一,Python出现下滑!
- C语言-找出0-100内的素数
- Latex术语表加边框
- 【投资理财】啥是期权?