什么是.snk的?
什么是.snk文件? 我知道它代表强命名的关键 ,但所有关于它是什么以及它是如何工作的解释都在我的头上。
有没有简单的解释如何使用强命名的密钥,以及它是如何工作的?
.snk文件用于将强名称应用于.NET程序集 。 这样一个强大的名字组成
一个简单的文本名称,版本号和文化信息(如果提供的话) – 加公钥和数字签名。
SNK包含一个唯一的密钥对 – 一个私钥和公钥,可以用来确保你有一个独一无二的大会名称。 当程序集是强命名的,从程序集的内容构造一个“散列”,散列用私钥encryption。 然后,这个签名的散列与来自.snk的公钥一起放入程序集中。
之后,当有人需要validation强命名程序集的完整性时, 他们构build程序集内容的散列,并使用程序集中的公钥来解密程序集附带的散列 – 如果两个散列匹配,程序集validation通过。
能够以这种方式validation程序集非常重要,以确保没有人将程序集换成恶意程序集,从而破坏整个应用程序。 这就是非强名称程序集与强名称程序集不相同的原因,所以它们不能放在GAC中。 另外,还有一个信任链 – 你不能生成一个引用非强命名程序集的强命名程序集。
文章“ 强命名的秘密 ”。 做出更详细的解释这些概念的出色工作。 有图片。
在.Net世界中, SNK文件被用来签署你编译的二进制文件。 这可以让一些事情发生:
- 您可以在GAC (全局程序集caching)中注册程序集 。 基本上这样你可以在同一台机器上的许多地方引用它,而不必保持多个副本)。
- 你可以在其他也被签名的二进制文件中使用你的二进制文件(这对于签名的程序集是一种奇怪的病毒行为)。
- 您的程序集不能(很容易)被没有访问SNK文件的第三方修改,至less提供less量的安全性。
我对BizTalk服务器的工作原理并不熟悉,所以我不认为我可以在这个环境中明确他们所服务的具体目的。
希望这有些帮助。
.snk文件用于签署程序集,以便能够将它们添加到全局程序集caching(GAC)。
.snk文件包含公钥和私钥。 当您想用该密钥签署一些数据(或二进制数据)时,会计算数据的校验和,然后使用私有令牌对数据进行encryption。 然后将encryption的校验和添加到数据中。 任何人都可以使用密钥中的公共令牌解密校验和,并将其与计算的校验和进行比较,以validation签名数据是否已被篡改。
您可以在http://en.wikipedia.org/wiki/Public-key_cryptography上阅读有关公钥encryption的更多信息。;
.snk文件是由框架实用程序集中的sn实用程序生成的“密钥”的持久版本。 然后使用这个文件来'数字签名'你的程序集。 这是一个2部分的关键..私人 – 公共密钥组合。 密钥的公开部分发布,即每个人都知道。 私人部分只有你自己,组件/应用程序开发人员,并打算保持这种方式。
当你签署你的程序集时,它使用你的程序集的私钥和散列值来创buildembedded到程序集中的数字签名。 此后,加载程序集的任何人都要经过validation步骤。 公钥是用来validation程序集是否真的来自你..你只需要公钥(这也是在程序集清单中以标记化的formsembedded)。 如果程序集被篡改,哈希值将会不同,程序集的负载将被中止。 这是一个安全机制。
.snk文件用于确保别人不能在你自己的地方放置自己的程序集。 它提供了一对encryption/解密密钥。
使用.snk文件对程序集进行签名时,会从程序集文件中计算哈希码值,并使用私钥进行encryption。 然后,将encryption的“摘要”与来自.snk文件的公钥一起粘贴到程序集中。
然后当有人收到你的程序集时,他们也可以计算出hashcode的值。 他们使用公钥解密您计算的值并比较计算出的值。 如果组件完全被改变了,那么这些值就会有所不同,组件的使用者就会知道你所assembly的组件不是你提供的组件。
在BizTalk Server的上下文中,构buildBizTalk解决scheme所使用的任何自定义程序集的人员都需要使用.snk文件对程序集进行签名,以便BizTalk Server可以将其加载到GAC中并使用它。