PHP進行RSA加密解密

來源:互聯網
上載者:User
最近在著手寫一個服務端安全介面規範,需要用到RSA加密解密。所以小試牛刀一下,並且做個記錄。

環境: Win7 64位

PHP 5.6.12

需要原型工具:

OpenSSL下載地址:http://slproweb.com/products/Win32OpenSSL.html

一、安裝OpenSSL

隨意安裝到哪裡

二、進入到OpenSLL的bin目錄下進行私密金鑰和公開金鑰的產生

//產生私密金鑰openssl genrsa -out rsa_private_key.pem 1024 //產生公開金鑰openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem

將生產的私密金鑰、公開金鑰拷貝到你的PHP項目中

三、開啟PHP的OpenSSL擴充

將php.ini中的extension=php_openssl.dll開啟(去掉;)

四、PHP加密解密練習

 * @time    2015-10-13 */namespace App\Models;class RsaCrypt {    const PRIVATE_KEY_FILE_PATH = 'app\Certificate\rsa_private_key.pem';    const PUBLIC_KEY_FILE_PATH = 'app\Certificate\rsa_public_key.pem';    /**     * Rsa加密     * @param string $orignData     * @return string     */    public static function encode($orignData) {        //密鑰檔案的路徑        $privateKeyFilePath = self::PRIVATE_KEY_FILE_PATH;        extension_loaded('openssl') or die('php需要openssl擴充支援');        (file_exists($privateKeyFilePath)) or die('密鑰的檔案路徑不正確');        //產生Resource類型的密鑰,如果密鑰檔案內容被破壞,openssl_pkey_get_private函數返回false        $privateKey = openssl_pkey_get_private(file_get_contents($privateKeyFilePath));        ($privateKey) or die('密鑰不可用');        //加密以後的資料,用於在網路上傳輸        $encryptData = '';        ///////////////////////////////用私密金鑰加密////////////////////////        if (openssl_private_encrypt($orignData, $encryptData, $privateKey)) {            return $encryptData;        } else {            die('加密失敗');        }    }    /**     * Rsa解密     * @param string $encryptData     * @return string     */    public static function decode($encryptData) {        //公開金鑰檔案的路徑        $publicKeyFilePath = self::PUBLIC_KEY_FILE_PATH;        extension_loaded('openssl') or die('php需要openssl擴充支援');        (file_exists($publicKeyFilePath)) or die('公開金鑰的檔案路徑不正確');        //產生Resource類型的公開金鑰,如果公開金鑰檔案內容被破壞,openssl_pkey_get_public函數返回false        $publicKey = openssl_pkey_get_public(file_get_contents($publicKeyFilePath));        ($publicKey) or die('公開金鑰不可用');        //解密以後的資料        $decryptData = '';        ///////////////////////////////用公開金鑰解密////////////////////////        if (openssl_public_decrypt($encryptData, $decryptData, $publicKey)) {            return $decryptData;        } else {            die('解密失敗');        }    }}


附錄:

一、在Win下面使用產生私密金鑰的時候遇到一個BUG:

錯誤:

WARNING: can't open config file: /usr/local/ssl/openssl.cnfLoading 'screen' into random state - doneGenerating RSA private key, 1024 bit long modulus.........++++++.........................................++++++unable to write 'random state'e is 65537 (0x10001)

解決辦法:

在CMD中進行如下操作

set OPENSSL_CONF=c:\OpenSSL-Win32\bin\openssl.cfg

或者

set OPENSSL_CONF=[path-to-OpenSSL-install-dir]\bin\openssl.cfg

PS:[path-to-OpenSSL-install-dir]為你的OpenSSL路徑


二、參考資料:

http://php.net/manual/en/book.openssl.php

http://www.jb51.net/article/64963.htm

http://stackoverflow.com/questions/16658038/cant-open-config-file-usr-local-ssl-openssl-cnf-on-windows

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.