我得到了字符串:
$string = '<Predstavitev xmlns="http://www.sigen.si/PodpisaniDokument" Id="MyVisualisation2"><Podatki ca="SIGEN-CA" dsPodjetja="" dsUporabnika="12345678" emso="1212912500444" maticna="" serial="2462933412018"/></Predstavitev>';
并且它的摘要值应该是
tmLGK3IVc1mC/r5ScUKXQ46wcCA=
但是当我使用这段PHP代码时
echo base64_encode(hash('SHA1', $string, true));
输出为
yszGh284QybUiyVNLfQlkh358qQ=
SOAP中引用了规范化方法(http://www.w3.org/TR/2001/REC-xml-c14n-20010315)和摘要方法算法(http://www.w3.org/2000/09/xmldsig#sha1)。
感谢您的帮助!
发布于 2018-08-31 04:32:52
在进行散列之前,您需要对字符串进行canonicalize
。
只需将字符串添加到DomDocument并从元素Predstavitev
获取C14N
$string = '<Predstavitev xmlns="http://www.sigen.si/PodpisaniDokument"
Id="MyVisualisation2"><Podatki ca="SIGEN-CA" dsPodjetja=""
dsUporabnika="12345678" emso="1212912500444" maticna=""
serial="2462933412018"/></Predstavitev>';
$xml = new DomDocument();
$xml->loadXML($string);
$node = $xml->getElementsByTagName('Predstavitev');
echo base64_encode(hash('SHA1', $node->item(0)->C14N(), true));
https://stackoverflow.com/questions/29050349
复制相似问题