php使用openssl來實現RSA(非對稱加密)
阿新 • • 發佈:2019-01-27
使用非對稱加密主要是藉助openssl的公鑰和私鑰,用公鑰加密私鑰解密,或者私鑰加密公鑰解密。
1.安裝openssl和PHP的openssl擴充套件
2.生成私鑰:openssl genrsa 用於生成rsa私鑰檔案,生成是可以指定私鑰長度和密碼保護
- openssl genrsa -out rsa_private_key.pem 1024
3.生成公鑰:rsa命令用於處理RSA金鑰、格式轉換和列印資訊
- openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
4.這裡我們使用私鑰加密,公鑰解密
- <?php
- /**
- * 金鑰檔案的路徑
- */
- $privateKeyFilePath = 'rsa_private_key.pem';
- /**
- * 公鑰檔案的路徑
- */
- $publicKeyFilePath = 'rsa_public_key.pem';
- extension_loaded('openssl') ordie('php需要openssl擴充套件支援');
- (file_exists($privateKeyFilePath) && file_exists($publicKeyFilePath)) ordie('金鑰或者公鑰的檔案路徑不正確');
- /**
- * 生成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) ordie('金鑰或者公鑰不可用');
- /**
- * 原資料
- */
- $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('解密成功');
- }