无法通过OpenSSL解密加密的RSA数据

时间:2011-12-12 09:45:43

标签: php encryption

我通过

为RSA生成公钥和私钥
openssl genrsa -des3 -out private.pem 2048
openssl rsa -in private.pem -out public.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_÷q$çD±!‘­[’ÓcÜC$Gèïü*ÞEÇGm>ËÂïQÄ„ð­½i=é¨Zs€©   |T²»Z”k( ráëµ1,r]o  –Òll'T¾i¹Bò}Æ1sËèÝwœÒ„Ä–È‹\1{S'ÆY³Ïà^hŽ™©XO%f7‘Bþ®Ra.ªÜäÆô¼'©³#Ý.H9…ŒÏ\6°ÆýþÆJµ^ðŠØÆr£Ô&ü—Ý*ýÄq ƒÝcÓÚAçOmœi\Ê¿›ãB~ZP1ŒÑÔâ¨S…6—êQ–²x¥^0´Íº(d?G•ÚIWå¡Ä" Failed to decrypt data

1 个答案:

答案 0 :(得分:2)

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

openssl_open()适用于openssl_seal()

我建议使用_open()_seal()变体而不是_public_encrypt()_private_decrypt()变体 - 公钥机制仅适用于会话密钥传输数字签名。公钥算法旨在用于随机数据(或message digests的近似随机数据)。使用具有公钥算法的非随机数据肯定是对算法的误用。