Значение дайджеста, полученное программно, отличается от soapUI?
Я хотел бы подписать XML-документ, чтобы отправить его в мыльный веб-сервис. Для начала я пытаюсь подписать простой узел, например:
<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".
Чтобы проверить запрос мыла, я создаю его с помощью SoapUI, но значение дайджеста этого узла отличается. Я не понимаю, почему значение дайджеста из SOAPUI отличается. У меня есть "ONNdniHbKnsMddcMR8rUuPWxbgw=".
Вот часть документа xml, созданного SoapUI:
<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>
Может кто-нибудь объяснить мне, почему эти значения дайджеста отличаются?