现有代码如下:
$sign='6945763ca31366d57c69e5aec4367d911abbba2b0918ae0e82e9e54dceb6a99c76895ad192850da8c2f12d2c320b1898dd5a3970901e6cc77301ceffe7a33104ef4d9bd5890c4be76d7e87bd5d2aca6fb8d9ea47ee9c49379f61b1cb41ffc18e6997bc4f77326cf0049f593a0153e77d3e8bbba765307bad46c91183c367daf1aa6650ad5a07f8135d6579ff644a20e061501d665c5557fa61324c0be5b1f7494b297e3207c790ae64ab8653571e3efc4905aff0078aed71e75d1449a334c4c93d6db240de01b3cd71a78c23bf7069cd35f4b93f3aaa63cefa8d52f85141dee8bba07b3c888a6e31696f4f4a75f2228d2951a786950c56f2cf49a92197b0ce83';
$data='123456789';
$fp=fopen("./allinpay-pds.pem","r");
$pub_key=fread($fp,8192);
echo '公钥 ',$pub_key;
fclose($fp);
$pub_key_id=openssl_get_publickey($pub_key);
$verify_result=openssl_verify($data,$sign,$pub_key_id);
openssl_free_key($pub_key_id);
while ($msg = openssl_error_string())
echo $msg . "<br />\n";
echo $verify_result;
if($verify_result==1){
echo "OK";
}else{
echo "bad";
}
但是在执行的时候出现错误error:04091077:rsa routines:INT_RSA_VERIFY:wrong signature length
对读取出来公钥进行base64解码
OpenSSL可以记录多个错误'项',所以你应该循环:
((ERR = ERR_get_error())!= 0)
ERR_error_string(ERR,BUF),放(ERR); / /或类似
或只是调用ERR_print_errors _fp循环
只要你想输出一个BIO或FILE *。
当你提供一个缓冲ERR_error_string,其返回值
始终指向该缓冲区,所以你不要需要单独szError的。
和,技术上sslerror应该是'长',以确保32位,
但在实践中,很少有系统现在有16位整型,
和那些可能不支持openssl的反正。
这是什么错误意味着:
>错误:04091068:RSA例程:INT_RSA_VERIFY:坏签名
这意味着一个RSA签名未验证,特别是,
“解密”后(Y ^ D mod n)的结果是不
预计哈希(SSL协议的签字)或
正确的预期哈希编码(否则)。
你说这个握手过程中发生的,只有RSA
核查应该是握手期间可能是:
(CLI)CertVerify“ARSA客户端的认证
(以上的ERR_get_error循环会显示这)
如果损坏过境PKCS1签名(包)
填充将赶上这个以压倒性的概率
(东西像2 ^ 80到1,我不记得确切)
因此无论是等软件不计算将要签署
值或签名正确,或你正在使用的OpenSSL
有一个严重的错误,影响旁若无人 - 不大可能,
除非你已经修改了它,或片状工具
或片状机上执行;或服务器(处理
CLI-CertVerify)也许你有一些代码,也许在一个回调,
已损坏的OpenSSL的握手检查计算。
(同行可以计算签名错误的方法之一是,如果
它被赋予的私钥和证书不匹配。
OpenSSL会检查这一点,但没有其他的软件可能。)
这到底是连接你,你的密码组(S)
你选择,你使用的客户端认证,什么是
您使用的是另一端,OpenSSL版本?
你可以尝试命令openssl的指令主要或s_server
从相同的同行(?),(至少),看到是否
它得到了同样的错误,正是在序列?