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

C# 用PHP对XML文件进行数字签名,c#,php,xml,xml-dsig,C#,Php,Xml,Xml Dsig,我需要使用RSA私钥对XML文件进行签名,以便使用我的C#应用程序进行验证。当我用我的C#应用程序对xml进行签名时,这是最终输出: <Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> <SignedInfo> <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />

我需要使用RSA私钥对XML文件进行签名,以便使用我的C#应用程序进行验证。当我用我的C#应用程序对xml进行签名时,这是最终输出:

<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
  <SignedInfo>
    <CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
    <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
    <Reference URI="">
      <Transforms>
        <Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
      </Transforms>
      <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
      <DigestValue>VIRRzqwb20aCSXrRTX1Y5vW//IA=</DigestValue>
    </Reference>
  </SignedInfo>
  <SignatureValue>mS3JQ/KmyXCayLly4hHRXKM51jPy230B3h4ngjzOhq0xR/7BRDQP2wfp7ugVcL5kMWaV+pBHbJgdvvu8OrzyxCUQ+R7RYqWpEBYJHUARov0Pws7oFybFpmzRnwhg2gPaPEzcVpK4VL4G1iM07XgmoSKM8Id0fRQ1lD+4BEcAxNY=</SignatureValue>
</Signature>
如何在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('<path to your private key>/private.pem');
$xmlTool->addTransform(FR3D\XmlDSig\Adapter\XmlseclibsAdapter::ENVELOPED);

$xmlTool->sign($xmlDocument);
require\u once\uuuuu DIR\uuuuuuu.'/供应商/autoload.php';
$xmlDocument=新DOMDocument();
$xmlDocument….//定义要签名的内容
$xmlTool=新FR3D\XmlDSig\Adapter\XmlseclibsAdapter();
$xmlTool->setPrivateKey(文件获取内容('/private.pem');
$xmlTool->addTransform(FR3D\XmlDSig\Adapter\XmlseclibsAdapter::信封);
$xmlTool->sign($xmlDocument);
现在,
$xmlDocument
的末尾有
元素。

您可以使用

安装库并在自动加载器中注册路径。如果使用,两个步骤都是自动的

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('<path to your private key>/private.pem');
$xmlTool->addTransform(FR3D\XmlDSig\Adapter\XmlseclibsAdapter::ENVELOPED);

$xmlTool->sign($xmlDocument);
require_once uu DIR_uu.'/vendor/autoload.php';
$xmlDocument=新DOMDocument();
$xmlDocument….//定义要签名的内容
$xmlTool=新FR3D\XmlDSig\Adapter\XmlseclibsAdapter();
$xmlTool->setPrivateKey(文件获取内容('/private.pem');
$xmlTool->addTransform(FR3D\XmlDSig\Adapter\XmlseclibsAdapter::信封);
$xmlTool->sign($xmlDocument);

现在,
$xmlDocument
末尾有了
元素。

用PHP实现或使用现有的。不知道如何使用它?尝试了几种方法来创建
XmlseclibsAdapter
的实例,但只有错误。我甚至创建了一个包含
AdapterInterface.PHP
XmlseclibsA所有内容的文件将dapter.php
放入一个文件中,并尝试从该文件开始工作,但后来有人说,
致命错误:找不到类“XmlseclibsAdapter”
。您解决了这个问题吗?我也有同样的问题,并且使用XMLDsig这个lib签名在php中不包含任何元素,也不使用现有的。不明白如何使用它?尝试了几种方法来创建我甚至创建了一个包含
AdapterInterface.php
XmlseclibsAdapter.php
所有内容的文件,并尝试从该文件开始工作,但后来有人说
致命错误:找不到类“XmlseclibsAdapter”
。你解决了这个问题吗问题?我也有同样的问题,使用XMLDsig这个lib签名没有任何作用。你知道如何使用函数setPrivateKey来通知私钥的密码吗?@samul-你知道如何传递私钥的密码吗?你知道如何使用函数setPrivateKey来通知私钥的密码吗?@samul-你知道吗找出如何传递私钥的密码?