2011-12-12 46 views
1

我生成RSA公鑰和私鑰由不能OpenSSL的

openssl genrsa -des3 -out private.pem 2048 
openssl rsa -in private.pem -out public.pem -outform PEM -pubout 

和使用下面的PHP代碼解密被加密的RSA數據加密和解密數據。

<?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

回答

2

如果你一些事情使用openssl_public_encrypt()加密您的數據,您需要使用openssl_private_decrypt()來解密數據。

openssl_open()適用於openssl_seal()

我建議使用_open()_seal()變種,而不是_public_encrypt()_private_decrypt()變種 - 公鑰機制僅適用於會話密鑰傳輸數字簽名。公鑰算法適用於隨機數據(或​​的近似隨機數據)。使用公鑰算法的非隨機數據肯定是算法的錯誤用法。