gpt4 book ai didi

XML 签名 : How to calculate the digest value?

转载 作者:数据小太阳 更新时间:2023-10-29 01:38:36 29 4
gpt4 key购买 nike

我有这样一个 XML

<?xml version="1.0" encoding="utf-8"?>
<foo>
<bar>
<value>A</value>
</bar>
<bar>
<value>B</value>
</bar>
<baz>
<value>C</value>
</baz><Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /><SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" /><Reference URI=""><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /></Transforms><DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" /><DigestValue>WqpRWHxXA0YgH+p3Sxy6hRo1XIk=</DigestValue></Reference></SignedInfo><SignatureValue>EoRk/GhR4UA4D+8AzGPPkeim1dZrlSy88eF73n/T9Lpeq9IxoGRHNUA8FEwuDNJuz3IugC0n2RHQQpQajiYvhlY3XG+z742pgsdMfFE4Pddk4gF1T8CVS1rsF7bjX+FKT/c8B2/C8FNgmfkxDlB/ochtbRvuAGPQGtgJ3h/wjSg=</SignatureValue><KeyInfo><X509Data><X509Certificate>MIIB8zCCAVygAwIBAgIQgfzbrIjhLL9FobStI2ub3zANBgkqhkiG9w0BAQQFADATMREwDwYDVQQDEwhUZXN0ZUFjbjAeFw0wMDAxMDEwMDAwMDBaFw0zNjAxMDEwMDAwMDBaMBMxETAPBgNVBAMTCFRlc3RlQWNuMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDO+yAZ8/qJbhSVH/+2wMmzix3jM/CExb6sTgaiPwe6ylcHgF45zeQDq06OSJZCSns34em/ULINZddDf8z0b9uk/2sOGr1pYqsunLLBvw2FkvWJQDkhx2SzCm8v4xGX2kyXNbjiY/K56oPOMjpayKoAFnnvk7p2iFAxNZK/6lpZ7wIDAQABo0gwRjBEBgNVHQEEPTA7gBCOOHcajwnATYZ0t6w7LVU0oRUwEzERMA8GA1UEAxMIVGVzdGVBY26CEIH826yI4Sy/RaG0rSNrm98wDQYJKoZIhvcNAQEEBQADgYEABL9Qhi6f1Z+/t8oKXBQFx3UUsNF9N2o4k6q1c3CKZYqx2E/in+nARIYRdh5kbeLfomi6GIyVFeXExp8crob3MAzOQMvXf9+ByuezimMPIHDvv0u3kmmeITXfoZrHCDxLoWWlESN1owBfKPqe7JKAuu9ORDC0pUiUfCHWxCoqNos=</X509Certificate></X509Data></KeyInfo></Signature>
</foo>

如何创建引用中的摘要值 (WqpRWHxXA0YgH+p3Sxy6hRo1XIk=)?我的意思是我如何手动计算这个值?

最佳答案

我在试图找出完全相同的东西时遇到了这个问题。后来我弄清楚了如何去做,所以我想我会在这里发布答案。

需要发生的事情是:

  • 规范化
  • 创建摘要值,通常是 SHA1(但也可以是 SHA256)
  • base64编码

规范化部分相当简单,因为 Java 库为我做了这件事。接下来我遇到的困难是摘要的创建,因为我犯了一个 fatal error ,即我生成的 SHA1 摘要是十六进制形式的 SHA1。 SHA1 是 160 位,所以是 20 个字节,但是如果您将这 160 位输出为 HEX,您将得到 40 个字符。如果您随后对其进行 base64 编码,则与 DigestValue 中应有的值相比,您将得到完全错误的值

相反,您应该生成 SHA1 摘要并对 20 字节输出进行 base64 编码。不要尝试将 20 个字节输出到 STDOUT,因为它极不可能可读(这就是为什么人们经常输出等价的 HEX,因为它 可读)。相反,只需 base64 编码这 20 个字节,这就是您的 DigestValue。

关于XML 签名 : How to calculate the digest value?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2245320/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com