php 實現openssl 的非對稱加密

使用非對稱加密主要是藉助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('解密成功');
    }
複製代碼
相關文章
相關標籤/搜索