基本上,所有被视为标准库(例如mscorlib.dll)的Microsoft程序集都包含伪造的16字节公共密钥
00000000000000000400000000000000
由ECMA-335(CLI规范)定义为Ecma /标准公钥。它用于计算公钥令牌b77a5c561934e089。但是,为了创建然后在以后验证程序集签名(强名称),您需要真实密钥。真实的RSA公钥始终至少为128个字节。那在哪呢
许多这样的程序集包括带有文件EcmaPublicKey.snk的AssemblyKeyFileAttribute。但是此文件仅包含Ecma公钥本身的16个字节,这意味着该文件仅用于构建程序集而不用于加载。同样,此类程序集同时使用128字节和256字节强名称签名,这意味着Ecma公钥必须映射到至少两个不同大小的RSA密钥对中。
我注意到Mono项目使用配置文件,其中b77a5c561934e089被映射为真实的公钥,但是Windows可能以不同的方式处理它。我发现了一些与此问题相关的旧帖子,但是都没有提供任何合法答案。