Windows验证来自Open SSL php的签名

Windows验证来自Open SSL php的签名,php,winapi,openssl,Php,Winapi,Openssl,我使用PHP对带有openssl_符号的字符串进行签名。到目前为止一切正常 问题是我想从Windows验证签名。为此,我将证书、消息和签名传递到windows应用程序。 如何使用CryptVerifyDetachedMessageSignature强制使用PHP代码使用的证书 我试过了,但它在PHP创建的签名上返回“asn1 bad tag value met” 谢谢…不走运。 最后我求助于openssl_pkcs7_sign,它输出一条S/MIME兼容的消息,我可以在Windows中处理它。很

我使用PHP对带有openssl_符号的字符串进行签名。到目前为止一切正常

问题是我想从Windows验证签名。为此,我将证书、消息和签名传递到windows应用程序。 如何使用CryptVerifyDetachedMessageSignature强制使用PHP代码使用的证书

我试过了,但它在PHP创建的签名上返回“asn1 bad tag value met”

谢谢…

不走运。
最后我求助于openssl_pkcs7_sign,它输出一条S/MIME兼容的消息,我可以在Windows中处理它。

很难说,因为您还没有发布代码或签名/明文/密钥示例。但是,作为替代,以下是我(使用phpseclib)的做法:


如果签名模式是PSS,只需执行
$rsa->setSignatureMode()
(无任何参数)即可


如果签名和明文都在同一个blob中,则需要根据所使用的任何文件格式将其分开。

我也将尝试此方法。
<?php
include('Crypt/RSA.php');

$rsa = new Crypt_RSA();
//$rsa->setPassword('password');
$rsa->loadKey('...'); // private key

$plaintext = '...';

$rsa->setSignatureMode(CRYPT_RSA_SIGNATURE_PKCS1);
$signature = $rsa->sign($plaintext);

$rsa->loadKey('...'); // public key
echo $rsa->verify($plaintext, $signature) ? 'verified' : 'unverified';
?>