php中如何用私钥签名和公钥校验

php中如何用私钥签名和公钥校验,php,rsa,public-key,phpseclib,pkcs#8,Php,Rsa,Public Key,Phpseclib,Pkcs#8,我有一个RSA私钥和一个RSA公钥 两个rsa密钥都是xml版本(…) 我需要从私钥生成一个PKCS8签名,并用php中的publik密钥对其进行测试 我用这个片段做签名: $content = "test string"; include('Crypt/RSA.php'); $rsa = new Crypt_RSA(); $rsa->loadKey(file_get_contents("private.txt")); $pem_format = $rsa->getPrivateKe

我有一个RSA私钥和一个RSA公钥

两个rsa密钥都是xml版本(

我需要从私钥生成一个PKCS8签名,并用php中的publik密钥对其进行测试

我用这个片段做签名:

$content = "test string";
include('Crypt/RSA.php');
$rsa = new Crypt_RSA();
$rsa->loadKey(file_get_contents("private.txt"));
$pem_format = $rsa->getPrivateKey();
$pvk_res = openssl_get_privatekey($pem_format); 
$sig = '';
openssl_sign($content , $sig, $pvk_res, OPENSSL_ALGO_SHA1);
$signature = base64_encode($sig);
这是签名的正确方法吗


现在,如何使用公钥来测试签名的准确性???

PKCS8关注的是密钥格式,而不是签名

另外,我看到您正在使用phpseclib将密钥转换为pem,然后使用openssl。为什么不把phpseclib用于所有事情呢?此时,您可以使用以下示例:



谢谢。但是
$rsa->verify($plaintext,$signature)
给了我“未验证的”:(你是在一字不差地使用该代码,还是将你认为需要的部分复制/粘贴到你自己的库中?如果是后者,请不要忘记
$rsa->setSignatureMode(CRYPT\u rsa\u signature\u PKCS1)
。我一字不差地复制它,而不是
$rsa->loadKey(“…”);//公钥
我使用了
$rsa->loadKey('public.txt');//公钥
,但它不起作用。当我使用这个
$rsa->loadKey('private.txt'));//公钥
有效!!但我想用公钥而不是私钥来检查它!!!如果你想从文件中读取密钥,你需要执行
$rsa->loadKey(file\u get\u contents('public.txt'))
file\u get\u contents('private.txt')
<?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';
?>