我为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()
变体——公钥机制仅用于会话密钥传输和数字签名。公钥算法旨在用于随机数据(或消息摘要的近乎随机数据)。在公钥算法中使用非随机数据绝对是对算法的误用。