使用非對稱加密主要是藉助openssl的公鑰和私鑰,用公鑰加密私鑰解密,或者私鑰加密公鑰解密。php
安裝openssl和PHP的openssl擴展
#本地運行cmd->進入apache bin目錄
生成私鑰:openssl genrsa 用於生成rsa私鑰文件,生成是能夠指定私鑰長度和密碼保護
openssl genrsa -out rsa_private_key.pem 1024
生成公鑰:rsa命令用於處理RSA密鑰、格式轉換和打印信息
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
複製代碼
4.這裏咱們使用私鑰加密,公鑰解密apache
<?php
/** * 密鑰文件的路徑 */
$privateKeyFilePath = 'rsa_private_key.pem';
/** * 公鑰文件的路徑 */
$publicKeyFilePath = 'rsa_public_key.pem';
extension_loaded('openssl') or die('php須要openssl擴展支持');
(file_exists($privateKeyFilePath) && file_exists($publicKeyFilePath)) or die('密鑰或者公鑰的文件路徑不正確');
/** * 生成Resource類型的密鑰,若是密鑰文件內容被破壞,openssl_pkey_get_private函數返回false */
$privateKey = openssl_pkey_get_private(file_get_contents($privateKeyFilePath));
/** * 生成Resource類型的公鑰,若是公鑰文件內容被破壞,openssl_pkey_get_public函數返回false */
$publicKey = openssl_pkey_get_public(file_get_contents($publicKeyFilePath));
($privateKey && $publicKey) or die('密鑰或者公鑰不可用');
/** * 原數據 */
$originalData = '加密前hahahaha';
/** * 加密之後的數據,用於在網路上傳輸 */
$encryptData = '';
echo '原數據爲:', $originalData, PHP_EOL;
///////////////////////////////用私鑰加密////////////////////////
if (openssl_private_encrypt($originalData, $encryptData, $privateKey)) {
/** * 加密後 能夠base64_encode後方便在網址中傳輸 或者打印 不然打印爲亂碼 */
echo '加密成功,加密後數據(base64_encode後)爲:', base64_encode($encryptData), PHP_EOL;
} else {
die('加密失敗');
}
///////////////////////////////用公鑰解密////////////////////////
/** * 解密之後的數據 */
$decryptData = '';
if (openssl_public_decrypt($encryptData, $decryptData, $publicKey)) {
echo '解密成功,解密後數據爲:', $decryptData, PHP_EOL;
} else {
die('解密成功');
}
複製代碼