我注意到核心 .NET 程序集具有 PublicKey = 00000000000000000400000000000000。不仅比 sn.exe 允许生成的那些更短(最少 384 位),而且它还有很多零。
如何使用如此花哨的公钥生成签名 key ?
最佳答案
这是 ECMA 标准定义的公钥。
它是为了处理三个相互矛盾的要求:
这三件事不能同时发生!
如果我创建了一个.NET版本(第2点),那么我需要提供一个标准库的版本(第3点),它需要被信任(第1点),所以我需要签名以证明我'微软。哦等等,我不是微软! (嗯,又是第 2 点)。
相反,发生的是:
00000000000000000400000000000000
签名(在 ECMA 标准中定义),尽管它们实际上是用上面提到的私钥签名的。 00000000000000000400000000000000
使用真实的公钥进行检查。如果这检查出来,那么它只能由我们信任的人在构建这些程序集时签名。 当然,MS 的框架不会信任我们的程序集,Mono 的不会信任它们,我们也不会信任它们中的任何一个,因为我们都有不同的真实 key ,对应于 ECMA 标准 key 。这是应该的。
同时,事实是
00000000000000000400000000000000
不匹配任何真正有效的公钥意味着它不可能与任何其他公钥发生冲突。
关于.net - .NET 核心程序集中非常特殊的 PublicKey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7205272/