使用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
有
元素。