使用PHP对XML文件进行数字签名

我需要使用私有RSA密钥签署一个XML文件,以便用我的C#应用​​程序进行validation。 当我用我的C#应用​​程序签署xml时,这是最终输出:

         VIRRzqwb20aCSXrRTX1Y5vW//IA=   mS3JQ/KmyXCayLly4hHRXKM51jPy230B3h4ngjzOhq0xR/7BRDQP2wfp7ugVcL5kMWaV+pBHbJgdvvu8OrzyxCUQ+R7RYqWpEBYJHUARov0Pws7oFybFpmzRnwhg2gPaPEzcVpK4VL4G1iM07XgmoSKM8Id0fRQ1lD+4BEcAxNY=  

登录C#:

 public static void SignXmlDocument(RSA key, XmlDocument doc) { var sxml = new SignedXml(doc); sxml.SigningKey = key; sxml.SignedInfo.CanonicalizationMethod = SignedXml.XmlDsigCanonicalizationUrl; var r = new Reference(""); r.AddTransform(new XmlDsigEnvelopedSignatureTransform(false)); sxml.AddReference(r); sxml.ComputeSignature(); var sig = sxml.GetXml(); doc.DocumentElement.AppendChild(sig); } 

我怎样才能在PHP中做同样的事情?

您可以使用XMLDsig

安装库并在自动装带器中注册路径。 如果您使用composer php,则两个步骤都是自动的。

 require_once __DIR__ . '/vendor/autoload.php'; $xmlDocument = new DOMDocument(); $xmlDocument..... // define the contents to sign $xmlTool = new FR3D\XmlDSig\Adapter\XmlseclibsAdapter(); $xmlTool->setPrivateKey(file_get_contents('/private.pem'); $xmlTool->addTransform(FR3D\XmlDSig\Adapter\XmlseclibsAdapter::ENVELOPED); $xmlTool->sign($xmlDocument); 

现在$xmlDocument元素。