ホームページ >バックエンド開発 >PHPチュートリアル >PHPで暗号化および復号化するにはどうすればよいですか? PHP の暗号化および復号化方法
この記事の内容は、PHP を暗号化および復号化する方法を紹介することです。 PHP の暗号化および復号化方法。一定の参考値があるので、困っている友達は参考にしていただければ幸いです。
機密データの送信を伴うネットワーク送信データのセキュリティを確保するには、ネットワーク上で送信する前にデータを事前に暗号化することが最善です。データは相手側からアクセス可能です。復号化されており、鍵 (公開鍵または秘密鍵) を使用して復号化する必要があります。鍵 (公開鍵または秘密鍵) を持たない人は、暗号化されたデータを取得したとしても復号化できません。
この記事では、対称暗号化では AES 暗号化アルゴリズム、非対称暗号化では RSA 暗号化アルゴリズムを主に紹介します。 [関連ビデオチュートリアルの推奨事項: PHP チュートリアル ]
1. 対称暗号化
単一キー暗号化を使用した暗号化システム方式では、情報の暗号化と復号化の両方に同じキーを使用できます。この暗号化方式は対称暗号化と呼ばれ、単一キー暗号化とも呼ばれます。
対称暗号化アルゴリズムで一般的に使用されるアルゴリズムには、DES、3DES、TDEA、Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK、AES などがあります。
AES 暗号化アルゴリズム
暗号化における Advanced Encryption Standard (AES) は、ラインダール暗号化方式とも呼ばれ、アメリカの A ブロック暗号化標準です。連邦政府によって採用されました。この標準はオリジナルの DES を置き換えるために使用され、多くの関係者によって分析され、世界中で広く使用されています。 2006 年、Advanced Encryption Standard は、対称キー暗号化の最も人気のあるアルゴリズムの 1 つになりました。
PHP の OpenSSL 拡張機能は、AES 暗号化アルゴリズムを実装しました。OpenSSL 拡張機能が提供するメソッドを使用してデータを暗号化および復号化できます。PHP はバージョン 7.2 で MCrypt 暗号化を完全に削除しました。PHP マニュアルは 7.1 に移行されました。このページには、OpenSSL を使用して MCrypt を置き換えるという代替案が示されています。
PHP AES 実装 (暗号化、復号化)
PHP 実装コード:
class AES { //设置AES秘钥 private static $aes_key = 'bUYJ3nTV6VBasdJF'; //此处填写前后端共同约定的秘钥 /** * 加密 * @param string $str 要加密的数据 * @return bool|string 加密后的数据 */ static public function encrypt($str) { $data = openssl_encrypt($str, 'AES-128-ECB', self::$aes_key, OPENSSL_RAW_DATA); $data = base64_encode($data); return $data; } /** * 解密 * @param string $str 要解密的数据 * @return string 解密后的数据 */ static public function decrypt($str) { $decrypted = openssl_decrypt(base64_decode($str), 'AES-128-ECB', self::$aes_key, OPENSSL_RAW_DATA); return $decrypted; } }
2. 非対称暗号化
対称暗号化アルゴリズムは、暗号化と復号化に同じ秘密鍵を使用します。非対称暗号化アルゴリズムでは、暗号化と復号化に 2 つの鍵が必要です。 2 つの秘密キーは、公開キー (略してパブリック キー) と秘密キー (略してプライベート キー) です。
非対称暗号化で使用される主なアルゴリズムは、RSA、Elgamal、バックパック アルゴリズム、Rabin、D-H、ECC (楕円曲線暗号アルゴリズム) などです。
RSA 暗号化アルゴリズム
RSA は現在最も影響力のある公開キー暗号化アルゴリズムであり、このアルゴリズムは非常に単純な数理論の事実に基づいています。 2 つの大きな素数を乗算するのは簡単ですが、その積を因数分解するのは非常に難しいため、その積が暗号化キー、公開キー、および 2 つの大きな素数を組み合わせて秘密キーを形成するものとして公開される可能性があります。公開キーは公開して誰でも使用できるようにし、秘密キーは復号化のために使用します。
復号者は秘密キーを所有し、秘密キーの計算によって生成された公開キーを暗号化者に解放します。暗号化では、公開キーを使用して暗号文を暗号化し、復号者に送信します。復号者は、秘密キーを使用して暗号文を平文に復号します。
たとえば、A が B に情報を送信したいとします。最初に役割を決定します。A は暗号化者、B は復号化者です。まず、B は秘密鍵と呼ばれる KEY をランダムに決定し、この KEY を送信せずにマシン B に保持し、次にこの KEY から公開鍵と呼ばれる別の KEY を計算します。この公開キーの特性は、それを生成した秘密キーを独自に計算することがほとんど不可能であるということです。次に、公開鍵がネットワークを通じて A に送信されます。公開鍵を受け取った A は、公開鍵を使用して情報を暗号化し、暗号文をネットワークを通じて B に送信します。最後に、B は既知の秘密鍵を使用して情報を暗号化します。暗号文が解読されました。以上が RSA アルゴリズムのワークフローです。
#アルゴリズムの実装プロセスは次のとおりです:
# 2 つの大きな素数 p と q (p は q に等しくありません) をランダムに選択し、計算します。 N=pq.
オイラー関数によると、N 以下で N と素な整数の数は (p-1)(q-1) です。
(p-1)(q-1) と互いに素で、e が (p-1)(q-1) より小さい整数 e を選択してください。
次の式を使用して d を計算します: d× e ≡ 1 (mod (p-1)(q-1))。
p と q のレコードを破棄します。
上記の内容では、(N,e) が公開鍵、(N,d) が秘密鍵です。
秘密キーと公開キーの生成
秘密キー ファイルの生成:
openssl genrsa -out rsa_private_key.pem 1024
秘密キーを使用して公開キーを生成:
openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
データは、生成された公開キーと秘密キーを使用して暗号化および復号化できます。
PHP RSA 実装 (暗号化、復号化)
PHP 実装コード (公開キー暗号化)秘密鍵の復号化):
class RSA { /** * @param string $str 要加密的数据 * @param string $public_key 公钥 * @return string */ static public function encrypt($str, $public_key) { $encrypted = ''; $pu_key = openssl_pkey_get_public($public_key); openssl_public_encrypt($str, $encrypted, $pu_key);//公钥加密 $encrypted = base64_encode($encrypted); return $encrypted; } /** * 解密 * @param string $str 要解密的数据 * @param string $private_key 私钥 * @return string */ static public function decrypt($str, $private_key) { $decrypted = ''; $pi_key = openssl_pkey_get_private($private_key); openssl_private_decrypt(base64_decode($str), $decrypted, $pi_key);//私钥解密 return $decrypted; } }
PHP 実装コード (秘密鍵の暗号化と公開鍵の復号化):
class RSA { //私钥加密 static public function encrypt($str, private_key) { $encrypted = ''; $pi_key = openssl_pkey_get_private($private_key); openssl_private_encrypt($data, $encrypted, $pi_key); //私钥加密 $encrypted = base64_encode($encrypted); return $encrypted; } //公钥解密 static public function decrypt($str, $public_key) { $decrypted = ''; $pu_key = openssl_pkey_get_public($public_key); openssl_public_decrypt(base64_decode($str), $decrypted, $pu_key);//公钥解密 return $decrypted; } }
要約: 上記がこの記事の全内容です。お役に立てば幸いです。みんなの学習の手助けに。
以上がPHPで暗号化および復号化するにはどうすればよいですか? PHP の暗号化および復号化方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。