什么是.snk文件?我知道它代表Strongly Named Key,但所有关于它是什么以及它是如何工作的解释都在我脑海中.
关于如何使用强名称密钥以及它如何工作,是否有任何简单的解释?
.snk文件用于将强名称应用于.NET程序集.如此强大的名字包括
一个简单的文本名称,版本号和文化信息(如果提供)-plus公钥和数字签名.
SNK包含一个唯一的密钥对 - 私钥和公钥,可用于确保您具有唯一的强名称.当程序集具有强名称时,将从程序集的内容构造"哈希",并使用私钥加密哈希.然后,这个签名的哈希与.snk中的公钥一起放在程序集中.
稍后,当有人需要验证强名称程序集的完整性时,它们会构建程序集内容的哈希值,并使用程序集中的公钥来解密程序集附带的哈希值 - 如果两个哈希值匹配,装配验证通过.
能够以这种方式验证程序集以确保没有人为一个会破坏整个应用程序的恶意程序集换掉程序集是很重要的.这就是为什么非强名称程序集不像强名称程序集那样受信任的原因,因此它们不能放在GAC中.此外,还有一个信任链 - 您无法生成引用非强名称程序集的强名称程序集.
文章" 强命名的秘密 ".能够更好地解释这些概念.随着图片.
在.Net世界中,SNK文件用于对已编译的二进制文件进行签名.这允许一些事情发生:
您可以在GAC (全局程序集缓存)中注册程序集.基本上,您可以从同一台机器上的许多地方引用它,而无需维护多个副本).
您可以在其他已签名的二进制文件中使用您的二进制文件(这是一种与签名程序集有关的奇怪的病毒行为).
您的程序集不能(轻松)由无法访问SNK文件的第三方修改,至少提供少量安全性.
我不熟悉BizTalk服务器的工作原理,所以我认为我不能详细说明它们在该环境中的具体用途.
希望这有点帮助.
.snk文件用于对程序集进行签名,以便能够将它们添加到全局程序集缓存(GAC).
.snk文件包含密钥的公钥和私钥.如果要使用该密钥对某些数据(或二进制)进行签名,则会对数据计算校验和,然后使用私有令牌对其进行加密.然后将加密的校验和添加到数据中.任何人都可以使用密钥中的公共令牌来解密校验和,并将其与计算出的校验和进行比较,以验证签名数据是否未被篡改.
您可以在http://en.wikipedia.org/wiki/Public-key_cryptography上阅读有关公钥加密的更多信息.