我想签署一个xml文档,将其发送到soap web服务。 首先,我试图签署一个这样的简单节点:
<test xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="id-F4821D01E882FF4507149477187940483">
truc
</test>
测试元素的摘要值为“pdB9Sx1CJ6Cj2z / FoqamVKkjxZ8 =»。
这是一个计算摘要值的简单python代码:
from xml.dom import minidom
from xml.dom.ext import c14n
import base64
import hashlib
doc = minidom.parse('file2.xml')
canonical_xml = c14n.Canonicalize(doc)
print (canonical_xml)
print base64.b64encode(hashlib.sha1(canonical_xml).digest())
print (" ".join("{:02x}".format(ord(c)) for c in canonical_xml))
节点«test«位于名为'file2.xml'的文件中。
要测试soap请求,我使用SoapUI创建它,但此节点的摘要值不同。 我不明白为什么SOAPUI的摘要值不同。 我有«ONNdniHbKnsMddcMR8rUuPWxbgw =»。
以下是SoapUI生成的文档xml的一部分:
<ds:Reference URI="#id-F4821D01E882FF4507149477187940483">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
<ec:InclusiveNamespaces PrefixList="soapenv urn" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</ds:Transform>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>ONNdniHbKnsMddcMR8rUuPWxbgw=</ds:DigestValue>
</ds:Reference>
有人可以向我解释为什么这些摘要值不同吗?