在网上,看到很多初学.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里面对应的字符串和其他资源(有些图片也需要本地化,例如改变图片上的文字)提取出来,因此强签名就将程序支持的区域信息作为它的一部分。

组件发布了以后,如何想其他人证明组件就是你发布的?例如在下图的例子中,张三和黑客的程序都发布给王二,两个程序都声称自己是张三提供的,王二如何区别哪个才是真的张三呢?

因此我们有了数字签名这个解决方案,在下图的例子中:

  1. 张三先将自己的身份和公钥注册在权威机构里面。
  2. 张三发送代码给用户。
  3. 用户去权威机构去查询张三的身份是否和他声明的相符。
  4. 黑客发送代码给用户。
  5. 用户去权威机构查处代码声明的身份和它实际的身份不符。因此就可以采取保护措施。

因此公钥作为强签名的一部分就不是很奇怪了。

转自:http://blog.csdn.net/Donjuan/archive/2009/02/02/3859136.aspx

转载于:https://www.cnblogs.com/wk23415/archive/2011/04/06/2006436.html

[ZZ]强签名的由来和作用相关推荐

  1. 什么是.NET 程序集强签名

    http://blog.csdn.net/vipxiaotian/archive/2007/07/12/1686071.aspx 用强名称来给程序集签名即谓之程序集强签名! 那什么是强名称,签名又有什 ...

  2. 使用InternalsVisibleToAttribute给assembly添加“友元assembly”特性遭遇强签名

    一.如何让Intenal成员暴露给另一个程序集 我们知道Modifier为Internal的类型成员仅限于当前程序集能够访问,但是在某些情况下,我们希望将它们暴露给另一个程序集.比较典型的应用场景包括 ...

  3. 使用MSIL 汇编程序 (Ilasm.exe) 2 强签名

    在MSIL汇编程序中,原本的想法只是想告诉大家,如果遇到内部开发时,遇到没有源码的dll,怎样来修改dll中的bug,既然有朋友提到了强签名,以及破解相关的东西,那么今天就在谈一下我自己在这个过程中的 ...

  4. .Net程序集强签名详解

    强签名: 1. 可以将强签名的dll注册到GAC,不同的应用程序可以共享同一dll. 2. 强签名的库,或者应用程序只能引用强签名的dll,不能引用未强签名的dll,但是未强签名的dll可以引用强签名 ...

  5. 秋天NET快速强签名工具V1.1

    本款工具可针对NET库程序集等进行快速强签名,支持snk,pfx密码证书. 可用于将线程dll或程序集替换为自属证书签名,可用于解决NET未引用强签名等问题. 已集成VC2010,SDK工具,如发现电 ...

  6. 不能对Revit插件进行强签名

    背景 最近正在研发一款Revit插件,为加强dll间引用的关联性,对发布的所有dll进行了强签名. 在Revit加载强命名的插件后,执行插件命令,程序抛出异常未能加载文件或程序集或它的某一个依赖项.需 ...

  7. VS源码添加程序集强签名

    1.打开"开始"菜单或者右击"开始"菜单选择"搜索",在搜索栏输入"开发人员命令提示",选择"VS2015开发 ...

  8. 因果关系是通向强AI的阶梯or作用被夸大?

    整理 | 夕颜 出品 | AI科技大本营(ID:rgznai100) 一直以来,机器学习和统计学之间的界限就比较模糊,比如诺奖得主托马斯·萨金特就曾经说过人工智能其实就是统计学,只不过用了一个很华丽的 ...

  9. 关于加密、签名、证书的作用及运用场景

    面对MD5.SHA.DES.AES.RSA等等这些名词你是否有很多问号?这些名词都是什么?还有什么公钥加密.私钥解密.私钥加签.公钥验签.这些都什么鬼?或许在你日常工作没有听说过这些名词,但是一旦你要 ...

最新文章

  1. 设置腾讯云linux服务器中 MySQL 允许远程访问
  2. 使用VS2012进行性能测试和负载测试
  3. 真正的自重...小偷可以灭绝
  4. 一个xmltojson类
  5. 为什么在使用get时,Properties对象总是忽略默认值?
  6. 多选Select排序
  7. NXP UWB NCJ29D5开发(一)环境搭建
  8. QQ登录JS SDK教程,调用openapi接口
  9. 极光推送java服务器端_极光推送服务器端(JAVA)
  10. OC算法练习-Hash算法
  11. Ext 3.1版本放出,可以免费下载了
  12. WIN7远程桌面连接显示凭据不工作的解决方法
  13. 压倒eBay 挑战亚马逊 Shopify到底厉害在哪儿?
  14. linux mp4转h264工具,Linux音视频开发之二:转换YUY2到I420便于压缩成h264
  15. 运行时绘制Gizmo——关于unity3D的GL图像库的使用(非常详细)
  16. 我在b站学数据库 (七):多表操作
  17. 2020年2月编程语言排行榜:Java第一,Python出现下滑!
  18. C语言-找出0-100内的素数
  19. Latex术语表加边框
  20. 【投资理财】啥是期权?

热门文章

  1. 偶然的一次渗透从弱口令->docker逃逸
  2. 一次共享内存引起的线上事故分析
  3. Linux iptables用法与NAT
  4. os.system如何传参
  5. dojo中的AMD模式开发案例
  6. 缓存穿透、缓存击穿和缓存雪崩
  7. 分布式系统理论之租约机制学习
  8. SpringBoot启动解析
  9. javaweb学习总结(十一):使用Cookie进行会话管理
  10. Unity应用架构设计(6)——设计动态数据集合ObservableList