我注意到核心.NET程序集的PublicKey = 00000000000000000400000000000000。它不仅比sn.exe允许生成的那些(最小384位)短,而且它有很多零。
如何用如此花哨的公钥生成签名密钥?
发布于 2012-01-13 21:02:43
这是ECMA标准定义的公钥。
它是为了处理三个相互冲突的需求:
这三件事不能同时发生!
如果我创建了一个版本的.NET (第2点),那么我需要提供一个标准库的版本(第3点),它需要被信任(第1点),所以我需要在它上面签名来证明我是微软的。等等,我不是微软!(再说一遍,第二点)。
相反,发生的情况是:
00000000000000000400000000000000 (在ECMA标准中定义)相对应的密钥进行签名,尽管它们实际上是使用上述私钥进行签名的。00000000000000000400000000000000相对应的密钥进行签名的程序集的任何检查都使用真正的公钥进行检查。如果验证无误,那么它只能由我们信任的构建这些程序集的人签名。当然,MS的框架不会信任我们的程序集,Mono也不会信任它们,我们也不会信任他们中的任何一个,因为我们都有不同的真实密钥对应于ECMA标准密钥。这是理所当然的。
同时,00000000000000000400000000000000不匹配任何真正有效的公钥的事实意味着它不可能与任何其他公钥冲突。
发布于 2019-05-18 20:06:58
这不是这个问题的正确答案。这个答案唯一提供的是指向ECMA标准的指针,显然是带有CLI规范的ECMA-335。但是这个ECMA标准只提供了关于唯一/固定值和它应该被调用的名称的基本定义。否则,它不会提供有关如何以及在何处找到实际公钥的任何信息。值0000000000000000040000000000000000不是公钥,它只是一个称为标准公钥的标记,与真正的公钥无关。此值用于计算使用它的程序集的公钥令牌,但在处理程序集签名时,此值不用作RSA算法的任何公钥。你需要一个真正的公钥。问题的正确答案应该是如何以及在何处找到使用它的程序集的实际公钥
https://stackoverflow.com/questions/7205272
复制相似问题