PHP xml签名无法在.NET中验证(c#)

时间:2017-05-15 12:30:04

标签: xml digital-signature

我尝试使用此lib

在php中生成xml签名

但生成的xml签名不能由.NET验证(c#)。

php生成的签名在签名标记上有ds前缀。

像这样

<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">

但是当我使用相同的算法(rsa sha1)在c#中生成签名时,此标记看起来像这样

<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">

我不明白问题是什么或如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

类XMLSecurityDSig的构造函数接受名为 $ prefix 的名称空间的参数,默认为&#34; ds&#34;,如果您提供前缀消失的空字符串。

构造

/**
 * @param string $prefix
 */
public function __construct($prefix='ds')
{
    var_dump($prefix);
    $template = self::BASE_TEMPLATE;
    if (! empty($prefix)) {
        $this->prefix = $prefix.':';
        $search = array("<S", "</S", "xmlns=");
        $replace = array("<$prefix:S", "</$prefix:S", "xmlns:$prefix=");
        $template = str_replace($search, $replace, $template);
    }
    $sigdoc = new DOMDocument();
    $sigdoc->loadXML($template);
    $this->sigNode = $sigdoc->documentElement;
}

示例:

$objDSig = new XMLSecurityDSig("");

电贺 罗宾