PHP字符串到XML独占C14N

时间:2016-09-15 16:55:33

标签: php xml web-services security soap

我有一个xml文档(肥皂消息),希望我需要签署它的一部分(正文)。服务器中的算法需要身份的sha256采用独有的C14n格式。

我没有使用DOMDocument构建文档的问题,我只是使用字符串和curl发送,所以我不能使用 - > C14N(true)方法。

任何替代方案?

PS:我试图在sha256中散列原始字符串,但它没有提供与散列的独占c14n canocalized字符串相同的输出。

身体的例子:

<soap:Body xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="id-samplebody">
<node1 data="x"/>
</soap:Body>

1 个答案:

答案 0 :(得分:0)

感谢Paul Crovella我必须重新测试loadXML和C14N(),结果很棒,它具有相同的指纹。所以为了通过XML独占C14N来计算主体的哈希值,请执行以下操作:

$doc = new DOMDocument();
$doc->loadXML($string_to_be_signed);
echo base64_encode(sha1($doc->C14N(true)));