Значение дайджеста, полученное программно, отличается от 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>

Может кто-нибудь объяснить мне, почему эти значения дайджеста отличаются?

0 ответов

Другие вопросы по тегам