如何确定用于XML数字签名的`DigestValue`,`SignatureValue`和`RSAKeyValue`

时间:2015-07-02 04:54:17

标签: c# xml

我正在开展一个项目,我需要验证xml是否经过数字签名。 我真的很难尝试验证XML以获取关键值

    <Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
    <SignedInfo>
      <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
      <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
      <Reference URI=**Some URI Value**>
        <Transforms>
          <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
          <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">

          </Transform>
        </Transforms>
        <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
        <DigestValue>**Some Digest Value**</DigestValue>
      </Reference>
    </SignedInfo>
    <SignatureValue>**Some Signature Value**</SignatureValue>
  <KeyInfo xmlns:type="http://www.w3.org/2000/09/xmldsig#RSAKeyValue">  
    <RSAKeyValue><Modulus>**Some RSA Key Value**</Modulus>  
     <Exponent>AQAB</Exponent>
    </RSAKeyValue>
   </KeyInfo >  
</Signature>

我无法找出如何获取

的值
  1. Reference URI
  2. Digest Value
  3. Signature Value
  4. RSA Modulus Value
  5. 任何人都能告诉我如何获得以上所有的价值吗? 在XML验证中使用这些组合的逻辑是什么?

    我正在使用C#来检查验证。 你可以在之前的问题中检查c#的代码

    1. How to validate XML for following code
    2. 提前致谢。

1 个答案:

答案 0 :(得分:0)

如果您只想检查值是否存在,只需使用一些XML操作类,如XDocument。

如果您想验证签名,您需要了解这一点:

  1. 发行人生成文件的HASH(这是DigestValue)
  2. 发行人用他的私钥加密这个HASH并放入文件(这是SignatureValue)
  3. 用户使用文档发送证书(这是X509Certificate字段)。
  4. 因此,如果要检查签名是否有效,则需要使用公钥来标记SignatureValue,然后将其与DigestValue进行比较。如果两者相等,那么你的文件就可以了,如果没有,可能会发生两件事。或者在此过程中修改了文档,或者公钥与加密文档的私钥不对应。