当前位置: 首页 > 知识库问答 >
问题:

使用PHP的摘要值错误

壤驷阳冰
2023-03-14

我有绳子:

$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)。

多谢帮忙!

共有1个答案

冷正青
2023-03-14

如果摘要值是错误的,而应用的函数是正确的,那么输入值就是错误的--而不是摘要。摘要是正确的,因为它是正确的,从错误的输入值。

因此,您需要将已命名的标准(规范形式、摘要)应用于您所获得的输入。

如果您懒得自己做,例如,可以使用现有的库来解析SOAP响应XML中的算法:

$string = '<Predstavitev xmlns="http://www.sigen.si/PodpisaniDokument" Id="MyVisualisation2"><Podatki ca="SIGEN-CA" dsPodjetja="" dsUporabnika="12345678" emso="1212912500444" maticna="" serial="2462933412018"/></Predstavitev>';

$sig = new XMLDSig($soapResponse);

var_dump($sig->getDigest($string)); // string(28) "tmLGK3IVc1mC/r5ScUKXQ46wcCA="

XMLDSig类是XMLUtil的一部分,也在packagist上,只需要“hakre/XMLUtil”:“developer”。

 类似资料:
  • 我需要发送一个签名的XML文件到巴西的一个政府机构。问题是,我的Java代码(使用Java XML数字签名API)计算的摘要与使用另一个工具(如XMLSec)生成的摘要不同。 下面是我用来为某个XML节点生成XML签名的代码: 如果尝试使用xmlsec验证生成的XML,则会出现以下错误: 但如果我尝试使用xmlsec(使用相同的私钥)对同一文件(consult.xml)进行签名,则错误就会消失:

  • 实验概要 这一章的实验指导中,你将会学到: 单独生成 ELF 格式的用户程序,并打包进文件系统中 创建并运行用户进程 使用系统调用为用户程序提供服务

  • 实验概要 这一章的实验指导中,你将会学到: 设备树的概念和读取 virtio 总线协议 块设备驱动的实现 将块设备托管给文件系统

  • 实验概要 这一章的实验指导中,你将会学到: 线程和进程的概念以及运行状态的表示 线程的切换 对 CPU 进行抽象在上面完成对线程的调度

  • 实验概要 这一章的实验指导中,你将会学到: 虚拟地址和物理地址的概念和关系 利用页表完成虚拟地址到物理地址的映射 实现内核的重映射

  • 实验概要 这一章的实验指导中,你将会学到: 实现动态内存的分配 了解 QEMU 模拟的 RISC-V Virt 计算机的物理内存 通过页的方式对物理内存进行管理