PHP は RSA 暗号化と復号化を実行します

WBOY
リリース: 2016-06-23 13:24:55
オリジナル
1589 人が閲覧しました

最近、私は RSA 暗号化と復号化の使用を必要とするサーバー側のセキュリティ インターフェイス仕様の作成に取り組んでいます。なので、ぜひ試してみて記録を作ってみてください。

環境: Win7 64ビット

PHP 5.6.12

必要なプロトタイピングツール:

OpenSSLダウンロードアドレス: http://slproweb.com/products/Win32OpenSSL.html

、OpenSSLをインストール

好きな場所にインストールしてください

2. OpenSLL の bin ディレクトリに入り、秘密鍵と公開鍵を生成します

//生成私钥openssl genrsa -out rsa_private_key.pem 1024 //生成公钥openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
ログイン後にコピー

生成された秘密鍵と公開鍵を PHP プロジェクトにコピーします

3. PHP OpenSSL 拡張機能を有効にします

php.ini で extension=php_openssl.dll を有効にします (; を削除します)

4. PHP の暗号化と復号化の演習

<?php/* * RSA加密解密 *  * @auther  ken<695093513@qq.com> * @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('解密失败');        }    }}
ログイン後にコピー


付録:

1. Win Encountered a 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: OpenSSL パスの [path-to-OpenSSL-install-dir]


2. 参考文献:

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

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート