xmldsig php不会在XML中添加签名信息

时间:2015-07-22 05:50:40

标签: php xml xml-signature

抱歉我的英语:)。 我需要用XML编写签名块:

ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gost34310-gost34311"/>
<ds:Reference>
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
<ds:Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments"/>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gost34311"/>
<ds:DigestValue>drvEZVSz3nSXHVI6+iRSDXZDGud9Ay56LLfMkpQkRp4=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>/4ASSFXCsdsdMuwM9kw0riDbhhtLR/+UKZKNO51HbACu5DM
SLmmAmp5FwFHdsGtBQ==</ds:SignatureValue>
<ds:KeyInfo>
<ds:X509Data>

我在GIT中找到了这个:https://github.com/Maks3w/xmldsig 我的代码是:

        $data = new DOMDocument();
        $data->load(__DIR__ . '/newdata.xml');
        $xmlTool = new FR3D\XmlDSig\Adapter\XmlseclibsAdapter();
        $xmlTool->setPrivateKey(file_get_contents('C:\xampp\htdocs\EgovPayments\private1.pem'));
        $publicKey=$xmlTool->getPublicKey();
        //echo 'public key is:'.$publicKey;
        $xmlTool->setPublicKey($publicKey);
        $xmlTool->addTransform(FR3D\XmlDSig\Adapter\AdapterInterface::ENVELOPED);
        $xmlTool->setCanonicalMethod('http://www.w3.org/2001/10/xml-exc-c14n#');
        $xmlTool->sign($data);
        $data->saveXML();

但是在newdata.xml中没有任何改变,它如何在PHP中使用xmldsig? THX

2 个答案:

答案 0 :(得分:0)

函数DOMDocument :: saveXML()返回字符串。它不是为了更新文件 http://php.net/manual/en/domdocument.savexml.php

答案 1 :(得分:0)

我遇到了同样的问题 - 但找到了以下功能&#34; insertSignature&#34;在seclib。

如果使用适配器,请将以下行添加到verify-function的末尾:

$objXMLSecDSig->insertSignature($data->getElementsByTagName("Security")->item(0));