我是否需要从.snk文件发布公钥?

sha*_*oth 5 .net strongname assemblies

从sn.exe实用程序和这个问题的描述中,我看到公共密钥的副本被添加到使用强名称签名的每个程序集中.这足以验证程序集二进制文件是否未被更改.

但是,如何验证给定的程序集是否真的使用某个给定的密钥对签署并由给定的公司编译?任何人都可以生成他自己的密钥对,生成一些程序集并用他的密钥对签名.我是否需要发布公钥,以便那些想要验证程序集来源的人可以比较公钥?如果是这样,最好的方法是什么?

Mar*_*ris 6

不,您不需要在程序集之外发布公钥,因为它是在客户端应用程序内的引用旁边进行哈希处理并存储为令牌:

AssemblyName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=bcd6707151635d07"
Run Code Online (Sandbox Code Playgroud)

这提供了一种方法,以确保程序集的所有未来版本都是针对相同的密钥对进行编译的,因此也是来自同一个发布者的.

有关如何让这些信息阻止其他来源假装成你的更多细节可以在我的其他答案中找到.