我有一个xml文档(soap消息),希望我需要对它的一部分(正文)进行签名。服务器中的算法需要独占C14n格式的body的sha256。
问题是我没有使用DOMDocument构建文档,我只是使用字符串和curl来发送,所以我不能使用->C14N(true)方法。
有其他选择吗?
PS:我尝试对sha256中的原始字符串进行哈希处理,但它给出的输出不同于经过哈希处理的独占c14n规范化字符串。
body示例:
<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>发布于 2016-09-16 01:33:06
多亏了Paul Crovella,我不得不重新测试loadXML和C14N(),结果很糟糕,它有相同的指纹。因此,为了通过XML独占C14N计算正文的散列值,请执行以下操作:
$doc = new DOMDocument();
$doc->loadXML($string_to_be_signed);
echo base64_encode(sha1($doc->C14N(true)));https://stackoverflow.com/questions/39516523
复制相似问题