我正在尝试使用以下命令签署一个字符串:
$rsa = new Crypt_RSA();
//$rsa->setPassword('*****');
$rsa->loadKey(file_get_contents('i.pem')); // private key
$plaintext = 'f2e140eb-2b09-44ab-8504-87b25d81914c';
$rsa->setSignatureMode(CRYPT_RSA_SIGNATURE_PKCS1);
$ciphertext = $rsa->sign($plaintext);
$reto = base64_encode($ciphertext);
当我在本地验证它时,使用:
$pubb_key = openssl_pkey_get_public(file_get_contents('instancia_imta_ope.crt'));
$keyData = openssl_pkey_get_details($pubb_key);
$pkeyy = $keyData['key'];
$rsa->loadKey($pkeyy); // PUBLIC key
echo $rsa->verify($plaintext, $ciphertext) ? 'verified' : 'unverified';
它显示验证,当我使用我的经纪人的测试页面时,这个相同的代码不起作用。它不会恢复原始字符串。尝试使用不同的东西,我尝试了以下奇怪的代码:
$rsa = new Crypt_RSA();
$rsa->loadKey(file_get_contents('i.pem')); // PRIVATE key, IT SHOULD BE PUBLIC
$plaintext = 'f2e140eb-2b09-44ab-8504-87b25d81914c';
$rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
$ciphertext = $rsa->encrypt($plaintext);
$reto = base64_encode($ciphertext);
它奇怪或不合逻辑,因为我使用私钥加密,它应该是公钥,目标使用它的私钥来解密消息。奇怪的是,这个weid代码使测试页面发送一个OK,它恢复了字符串。我不知道为什么。所有这些都是更大消息的一部分,它最终使用 xml 签名进行处理,当我处理所有(添加 xml 签名)时,代理的其他测试器页面发送无效签名,我敢打赌这是因为怪异代码。没关系,问题:为什么正确的代码(rsa->sign....)不起作用?你对这一切有什么看法?谢谢马里奥