Answers:
.snk文件用于将强名称应用到.NET程序集。这样的强名包括
简单的文本名称,版本号和区域性信息(如果提供),再加上公共密钥和数字签名。
SNK包含一个唯一的密钥对-专用密钥和公用密钥,可用于确保程序集具有唯一的强名称。当程序集被强命名时,将从程序集的内容中构造一个“哈希”,并使用私钥对哈希进行加密。然后,将此签名的哈希值与.snk中的公钥一起放入程序集中。
稍后,当有人需要验证强命名程序集的完整性时,他们会建立程序集内容的哈希值,并使用程序集中的公钥来解密程序集随附的哈希值-如果两个哈希值匹配,组装验证通过。
能够以这种方式验证程序集很重要,以确保没有人将程序集换成会破坏整个应用程序的恶意程序集。这就是为什么不以强命名程序集那样信任非强名称程序集的原因,因此不能将它们放置在GAC中。此外,还有一个信任链-您不能生成引用非强命名程序集的强命名程序集。
文章“ 强命名的秘密 ”。在详细解释这些概念方面做得很好。带图片。
.snk文件用于对程序集进行签名,以便能够将其添加到全局程序集缓存(GAC)中。
.snk文件包含密钥的公共和私有令牌。当您想使用该密钥对某些数据(或二进制)进行签名时,将对数据计算校验和,然后使用专用令牌对其进行加密。然后将加密的校验和添加到数据中。任何人都可以使用密钥中的公共令牌解密校验和,并将其与他们计算出的校验和进行比较,以验证签名数据是否未被篡改。
您可以在http://en.wikipedia.org/wiki/Public-key_cryptography上了解有关公钥加密的更多信息。
.snk文件用于确保其他人无法代替自己的装配体。它提供了一对加密/解密密钥。
当.snk文件用于对程序集进行签名时,将从程序集文件计算哈希码值,并使用私钥对其进行加密。然后,将加密的“摘要”与.snk文件中的公钥一起添加到程序集中。
然后,当有人收到您的程序集时,他们还可以计算该哈希码值。他们使用公用密钥解密您计算出的密钥,并比较计算出的值。如果完全更改了装配,则这些值将有所不同,并且装配的用户将知道您拥有的装配不是您提供的装配。
在BizTalk Server的上下文中,任何构建BizTalk解决方案使用的自定义程序集的人都将需要使用.snk文件来对该程序集进行签名,以便BizTalk Server可以将其加载到GAC中并使用它。