首頁  >  文章  >  後端開發  >  php中怎麼使用rsa實作加密解密程式碼詳解

php中怎麼使用rsa實作加密解密程式碼詳解

伊谢尔伦
伊谢尔伦原創
2017-07-08 10:00:552500瀏覽

1、加密解密的第一步是產生公鑰、私鑰對,私鑰加密的內容能透過公鑰解密(反過來亦可以)

下載開源RSA金鑰產生工具openssl(通常Linux系統都會自備該程式),解壓縮至獨立的資料夾,進入其中的bin目錄,執行以下指令:

程式碼如下:

openssl genrsa -out rsa_private_key.pem 1024
openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out private_key.pem
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

第一指令產生原始RSA私密金鑰檔案rsa_private_key.pem,第二個指令將原始RSA私密金鑰轉換為pkcs8格式,第三條產生RSA公鑰rsa_public_key.pem
從上方看出透過私鑰能產生對應的公鑰,因此我們將私鑰private_key.pem用在伺服器端,公鑰發放給android跟ios等前端

2、php中用產生的公鑰、私鑰進行加密解密,直接上程式碼

 程式碼如下:

$fp=fopen("rsa/rsa_private_key.pem","r"); //你的私钥文件路径
$private_key=fread($fp,8192);
fclose($fp);
$fp1=fopen("rsa/rsa_public_key.pem","r"); //你的公钥文件路径
$public_key=fread($fp1,8192);
fclose($fp1);
//echo $private_key; 
$pi_key=openssl_pkey_get_private($private_key);//这个函数可用来判断私钥是否是可用的,可用返回资源id 
Resource
 id 
$pu_key=openssl_pkey_get_public($public_key );//这个函数可用来判断公钥是否是可用的
print_r($pi_key);echo "\n"; echo "<br>";
print_r($pu_key);echo "\n"; echo "<br>";
echo "<hr>";
$data=&#39;php ras加密算法&#39;;
$encrypted = ""; 
$decrypted = ""; 
echo "加密的源数据:".$data."\n"; echo "<br>";
echo "private key encrypt:\n"; echo "<br>";
openssl_private_encrypt($data,$encrypted,$pi_key);//私钥加密 
$encrypted = base64_encode($encrypted);//加密后的内容通常含有
特殊字符
,需要编码转换下,在网络间通过url传输时要注意base64编码是否是url
安全
的 
echo &#39;私钥加密后:&#39;.$encrypted."\n"; echo "<br>";echo "<br>";
echo "public key decrypt:\n"; echo "<br>";
openssl_public_decrypt(base64_decode($encrypted),$decrypted,$pu_key);//私钥加密的内容通过公钥可用解密出来 
echo &#39;公钥解密后:&#39;.$decrypted."\n"; echo "<br>";
echo "<hr>";
echo "public key encrypt:\n"; echo "<br>";
openssl_public_encrypt($data,$encrypted,$pu_key);//公钥加密 
$encrypted = base64_encode($encrypted); 
echo $encrypted,"\n"; echo "<br>";
echo "private key decrypt:\n"; echo "<br>";
openssl_private_decrypt(base64_decode($encrypted),$decrypted,$pi_key);//私钥解密 
echo $decrypted,"\n"; echo "<br>";

PHP的RSA配置常見問題#:

●PHP開發語言的程式碼範例中openssl資料夾中的3個DLL檔案用法

1、如果你的系統是windows系統,且system32檔案目錄下沒有libeay32.dll、ssleay32.dll這兩個檔案
那麼需要拷貝這兩個檔案到system32文件目錄。

2、如果您的php安裝目錄下(php\ext)中沒有php_openssl.dll

那麼請把php_openssl.dll放在這個資料夾中

喜歡加密解密的小夥伴要好好看看這篇文章,受益匪淺。 。 。

以上是php中怎麼使用rsa實作加密解密程式碼詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn