首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XML签名DigestValue无效

XML签名DigestValue无效
EN

Stack Overflow用户
提问于 2014-09-03 10:18:40
回答 1查看 3.6K关注 0票数 1

我正在尝试用PHP和xmlseclibs对XML文件进行签名。然而,所有的验证工具都说我的签名无效。XMLSpy说:“计算出的摘要值与引用摘要不匹配”

这是我的XML:

代码语言:javascript
复制
<root><value>x</value></root>

这是我得到的摘要:

代码语言:javascript
复制
KaMTM32K5rXl9U6MgG2BXuzNxoQ=

方法我曾经得到它:

1.)PHP:

代码语言:javascript
复制
$doc = new DOMDocument();
$doc->loadXML('<root><value>x</value></root>');
echo base64_encode(sha1($doc->documentElement->C14N(), true));

2.)OpenSSL:

代码语言:javascript
复制
openssl dgst -binary -sha1 test.xml | openssl enc -base64

3.)本网站:http://hash.online-convert.com/sha1-generator

这是XMLSpy以某种方式获得的摘要,它起作用:

代码语言:javascript
复制
HedaN7TMgHgq2bRypzavMuFLoCg=

我怎么才能得到这个摘要?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-04 15:05:09

XMLSpy在签名之前对它进行格式化。它添加了行提要和选项卡,而C14N没有删除这些内容。删除<Signature>时,将留下用于计算摘要的XML:

代码语言:javascript
复制
<root>
    <value>x</value>

</root>

XMLSpy所做的另一件事是向<Reference>添加属性URI="“。PHP库xmlseclibs在默认情况下不会这样做。所以我把我的代码改为:

代码语言:javascript
复制
$objDSig->addReference($doc, XMLSecurityDSig::SHA1, array('http://www.w3.org/2000/09/xmldsig#enveloped-signature'), array('force_uri' => TRUE));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25641809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档