摘要:1、加密解密的第一步是生成公鑰、私鑰對(duì),私鑰加密的內(nèi)容能通過公鑰解密(反過來亦可以)下載開源RSA密鑰生成工具openssl(通常Linux系統(tǒng)都自帶該程序),解壓縮至獨(dú)立的文件夾,進(jìn)入其中的bin目錄,執(zhí)行以下命令:openssl genrsa -out rsa_private_key.pem 1024 openssl pkcs8 -t
1、加密解密的第一步是生成公鑰、私鑰對(duì),私鑰加密的內(nèi)容能通過公鑰解密(反過來亦可以)
下載開源RSA密鑰生成工具openssl(通常Linux系統(tǒng)都自帶該程序),解壓縮至獨(dú)立的文件夾,進(jìn)入其中的bin目錄,執(zhí)行以下命令:
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私鑰轉(zhuǎn)換為 pkcs8格式,第三條生成RSA公鑰 rsa_public_key.pem
從上面看出通過私鑰能生成對(duì)應(yīng)的公鑰,因此我們將私鑰private_key.pem用在服務(wù)器端,公鑰發(fā)放給android跟ios等前端
2、php中用生成的公鑰、私鑰進(jìn)行加密解密
$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);//這個(gè)函數(shù)可用來判斷私鑰是否是可用的,可用返回資源id Resource id $pu_key=openssl_pkey_get_public($public_key );//這個(gè)函數(shù)可用來判斷公鑰是否是可用的 print_r($pi_key);echo "\n"; echo "<br>"; print_r($pu_key);echo "\n"; echo "<br>"; echo "<hr>"; $data='php ras加密算法'; $encrypted = ""; $decrypted = ""; echo "加密的源數(shù)據(jù):".$data."\n"; echo "<br>"; echo "private key encrypt:\n"; echo "<br>"; openssl_private_encrypt($data,$encrypted,$pi_key);//私鑰加密 $encrypted = base64_encode($encrypted);//加密后的內(nèi)容通常含有特殊字符,需要編碼轉(zhuǎn)換下,在網(wǎng)絡(luò)間通過url傳輸時(shí)要注意base64編碼是否是url安全的 echo '私鑰加密后:'.$encrypted."\n"; echo "<br>";echo "<br>"; echo "public key decrypt:\n"; echo "<br>"; openssl_public_decrypt(base64_decode($encrypted),$decrypted,$pu_key);//私鑰加密的內(nèi)容通過公鑰可用解密出來 echo '公鑰解密后:'.$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開發(fā)語言的代碼示例中openssl文件夾中的3個(gè)DLL文件用法
1、如果你的系統(tǒng)是windows系統(tǒng),且system32文件目錄下沒有l(wèi)ibeay32.dll、ssleay32.dll這兩個(gè)文件
那么需要拷貝這兩個(gè)文件到system32文件目錄。
2、如果您的php安裝目錄下(php\ext)中沒有php_openssl.dll
那么請(qǐng)把php_openssl.dll放在這個(gè)文件夾中
更多關(guān)于php rsa加密解密使用詳解請(qǐng)關(guān)注PHP中文網(wǎng)(ipnx.cn)其他文章!