我通过
为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
答案 0 :(得分:2)
如果您使用openssl_public_encrypt()
加密数据,则需要使用openssl_private_decrypt()
来解密数据。
openssl_open()
适用于openssl_seal()
。
我建议使用_open()
和_seal()
变体而不是_public_encrypt()
和_private_decrypt()
变体 - 公钥机制仅适用于会话密钥传输和数字签名。公钥算法旨在用于随机数据(或message digests的近似随机数据)。使用具有公钥算法的非随机数据肯定是对算法的误用。