不能通过OpenSSL解密加密的RSA数据


can't decrypt encrypted RSA data by OpenSSL

我为RSA生成公钥和私钥

openssl genrsa -des3 -out private。pem 2048Openssl rsa -in private。公开退出。pem -outform pem -pubout之前

和使用以下PHP代码加密和解密数据

<?php
$plaintext = 'Hello';
$publicKey = openssl_pkey_get_public('file://public.pem');
$encrypted = '';
if (!openssl_public_encrypt($plaintext, $encrypted, $publicKey))
    die('Failed to encrypt data');
var_dump($encrypted);

if (!$privateKey = openssl_pkey_get_private('file://private.pem', '123456789'))
    die('Private Key failed');
$decrypted = '';
if (openssl_open($encrypted, $decrypted, $envelope, $privateKey) === FALSE)
    die('Failed to decrypt data');
?>

它将加密数据,但解密数据它不工作,并显示数据解密失败

它将显示如下结果

string(256)"y)你害怕5 _÷问$ cD±!"——[' OcUC Geiu美元*ÞECGm> EAiQA"ð——½i = e¨Z€©| T Z²»"k (raeµ1,r] o -Oll¾我¹Bo}Æ1 seeywœo"a e喜爱' 1{年代'ÆY³Ia ^ hŽ™©XO % f7'Bþ®Ra。ªUaÆo¼的©³# Y.H9……我œ' 6°ÆYþÆJµ^ðŠØÆr£O&宣布* yAqƒYcOUAcOmœ我害怕' e; aB ~ ZP1œ诺亚¨年代…6-eQ-A x²¥^ 0´我º(d ?G•ÚIWå±Ä"解密数据失败

如果您使用openssl_public_encrypt()加密数据,则需要使用openssl_private_decrypt()解密数据。

openssl_open()openssl_seal()配合使用。

我建议使用_open()_seal()变体而不是_public_encrypt()_private_decrypt()变体——公钥机制仅用于会话密钥传输数字签名。公钥算法旨在用于随机数据(或消息摘要的近乎随机数据)。在公钥算法中使用非随机数据绝对是对算法的误用。