如何决定XML数字签名的"DigestValue"、"SignatureValue&quo

本文关键字:quot DigestValue quo SignatureValue 数字签名 何决定 决定 XML | 更新日期: 2023-09-27 18:00:49

我正在进行一个项目,需要验证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

有人能告诉我如何获得上述所有值吗?在XML验证中使用这些组合背后的逻辑是什么?

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

  1. 如何验证以下代码的XML

提前谢谢。

如何决定XML数字签名的"DigestValue"、"SignatureValue&quo

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

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

  1. 发行人生成文档的HASH并放在上面(这是DigestValue(
  2. 发行人用他的私钥加密这个HASH并放在文档上(这是SignatureValue(
  3. 用户将其证书与文档一起发送(这是X509Certificate字段(

因此,如果你想检查签名是否有效,你需要用他的公钥解密SignatureValue,然后将其与DigestValue进行比较。如果两者相等,则您的文档是可以的;如果不相等,则可能出现两件事。或者文档在处理过程中被修改,或者公钥与加密文档的私钥不一致。