如何决定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>
我无法追踪如何获得的值
Reference URI
Digest Value
Signature Value
RSA Modulus Value
有人能告诉我如何获得上述所有值吗?在XML验证中使用这些组合背后的逻辑是什么?
我使用C#
来检查验证。你可以在我之前的问题中检查c#的代码
- 如何验证以下代码的XML
提前谢谢。
如果只想检查值是否存在,只需使用一些XML操作类,如XDocument。
如果你想验证签名,你需要了解这一点:
- 发行人生成文档的HASH并放在上面(这是DigestValue(
- 发行人用他的私钥加密这个HASH并放在文档上(这是SignatureValue(
- 用户将其证书与文档一起发送(这是X509Certificate字段(
因此,如果你想检查签名是否有效,你需要用他的公钥解密SignatureValue,然后将其与DigestValue进行比较。如果两者相等,则您的文档是可以的;如果不相等,则可能出现两件事。或者文档在处理过程中被修改,或者公钥与加密文档的私钥不一致。