.snk是干什么用的?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (154)

.snk文件是干什么的?

对于如何使用强命名密钥以及如何工作,有什么简单的解释吗?

提问于
用户回答回答于

.snk文件用于应用.NET程序集的强名称.

如此强的名称由以下几个部分组成:

一个简单的文本名称、版本号和区域性信息(如果提供的话)-加上一个公钥和一个数字签名。

SNK包含一个唯一的密钥对--一个私钥和公钥,可用于确保程序集具有唯一的强名称。当程序集强命名时,将从程序集的内容构造“哈希”,并使用私钥加密哈希。然后,这个签名的散列连同.snk中的公钥一起放在程序集中。

稍后,当有人需要验证强命名程序集的完整性时,他们构建程序集内容的散列,并使用程序集中的公钥解密程序集附带的散列--如果两个散列匹配,则程序集验证将通过。

重要的是能够以这种方式验证程序集,以确保没有人将程序集替换为会破坏整个应用程序的恶意程序集。这就是为什么非强命名程序集不像强命名程序集那样被信任,因此它们不能放在GAC中。此外,还有一个信任链--不能生成引用非强命名程序集的强名称程序集。

用户回答回答于

在一个.net世界中,SNK文件用于对已编译的二进制文件进行签名。这就允许发生几件事:

  1. 可以在GAC中注册程序集。
  2. 可以在其他也被签名的二进制文件中使用二进制文件(这是一种与已签名程序集有关的奇怪的病毒行为)。
  3. 程序集不能由第三方无法访问SNK文件,至少提供了少量的安全性。

扫码关注云+社区