需要帮助了解装配签名过程

时间:2011-03-25 19:08:59

标签: .net assemblies assembly-signing

我正在签署一个.NET程序集。以下是我对该过程和相关问题的理解。

  1. 为了汇编签名,编译器执行可单向散列的单向散列,然后使用publishers私钥加密散列。现在这个加密的哈希值必须存储在某个地方。当我签署一个程序集并运行ILDasm来查看程序集的IL时,我看到一个.public键部分,但是看不到这个哈希在assemly中的存储位置。

  2. 从运行时加载此签名程序集时我读到的内容,它正在执行相反的过程,包括生成程序集的哈希并解密“强名称签名”。此解密的强名称签名将与步骤1中的哈希进行比较。如果这两个匹配,运行时将加载它,否则拒绝加载程序集。我不确定解密的“强名称签名”到底是什么,我又在哪里可以找到它。

  3. TIA

1 个答案:

答案 0 :(得分:3)

为了回答你的第一点,我写了一系列关于.NET程序集布局的博客文章;我在second post中介绍了CLR元数据。如您所见,强名称哈希存储在程序集的.text部分中,位于CLI标题下方。

恐怕我不知道回答你的第二个问题。但请注意,在完全信任的情况下,不正确的强名称不会阻止程序集正常加载和运行 - 您必须自己使用pinvoke调用显式检查强名称是否完整。