程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php rsa加密解密使用詳解

php rsa加密解密使用詳解

編輯:關於PHP編程

     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='php ras加密算法';
    $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 '私鑰加密後:'.$encrypted."n"; echo "<br>";echo "<br>";
    echo "public key decrypt:n"; echo "<br>";
    openssl_public_decrypt(base64_decode($encrypted),$decrypted,$pu_key);//私鑰加密的內容通過公鑰可用解密出來
    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開發語言的代碼示例中openssl文件夾中的3個DLL文件用法

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

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

    那麼請把php_openssl.dll放在這個文件夾中

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

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved