ホームページ >バックエンド開発 >PHPチュートリアル >PHP で対称暗号化と非対称暗号化を行うにはどうすればよいですか?

PHP で対称暗号化と非対称暗号化を行うにはどうすればよいですか?

WBOY
WBOYオリジナル
2023-05-21 15:10:402475ブラウズ

ネットワーク セキュリティの分野では、暗号化テクノロジは非常に重要な技術手段であり、データの暗号化と復号化を行ってデータのセキュリティを確保できます。人気のあるサーバー側プログラミング言語として、PHP は、さまざまなアプリケーション シナリオのニーズを満たす対称暗号化および非対称暗号化のサポートも提供します。

    #対称暗号化
対称暗号化とは、暗号化と復号化に同じキーを使用する暗号化方式を指します。 DES、3DES、AES など、多くの対称暗号化アルゴリズムがあります。 PHP では、mcrypt 拡張ライブラリによって提供される関数を使用して対称暗号化を実装できます。

サンプル コードは次のとおりです。

$key = '123456789'; // 密钥
$data = 'Hello World'; // 待加密字符串
$iv = mcrypt_create_iv(mcrypt_get_block_size(MCRYPT_DES, MCRYPT_MODE_CBC), MCRYPT_RAND);
$cipher = mcrypt_encrypt(MCRYPT_DES, $key, $data, MCRYPT_MODE_CBC, $iv);
echo base64_encode($cipher); // 输出加密后的字符串

上記のコードでは、DES 暗号化は mcrypt_encrypt 関数によって実行され、MCRYPT_MODE_CBC モードが埋め込みに使用されます。 $key は対称暗号化のキー、$data は暗号化される平文文字列、$iv はランダムな初期化ベクトルです。

復号化のサンプル コードは次のとおりです。

$cipher = base64_decode('JnFXVC9e+rzR8oUgM67Q0w=='); // 加密后的字符串
$key = '123456789'; // 密钥
$iv = mcrypt_create_iv(mcrypt_get_block_size(MCRYPT_DES, MCRYPT_MODE_CBC), MCRYPT_RAND);
$plain = mcrypt_decrypt(MCRYPT_DES, $key, $cipher, MCRYPT_MODE_CBC, $iv);
echo $plain; // 输出解密后的字符串

    非対称暗号化
非対称暗号化アルゴリズムでは、暗号化と復号化にキーのペアが必要です。公開キー キーは公開できますが、秘密キーは秘密にしておく必要があります。一般的に使用される非対称暗号化アルゴリズムには、RSA、DSA などが含まれます。 PHP では、openssl 拡張ライブラリによって提供される関数を使用して非対称暗号化を実装できます。

サンプル コードは次のとおりです。

$data = 'Hello World'; // 待加密字符串
$res = openssl_pkey_new(); // 生成密钥对
openssl_pkey_export($res, $privateKey); // 获取私钥
$publicKey = openssl_pkey_get_details($res)["key"]; // 获取公钥
openssl_public_encrypt($data, $cipher, $publicKey); // 加密数据
echo base64_encode($cipher); // 输出加密后的字符串

上記のコードでは、まず openssl_pkey_new 関数を使用して公開キーと秘密キーのペアを生成し、次に openssl_public_encrypt 関数を使用してデータを暗号化します。 。このとき取得した $publicKey は公開することができますが、$privateKey は秘密にしておく必要があります。

復号化のサンプル コードは次のとおりです。

$cipher = base64_decode('RvnOeNe+p8LtlpuUcq0wqFoX2yUaGXvY6FHlWpT0NQwzVQwVcDSnkw4C6YJMvnsMH4N5JDP18RI8x7CFqUCdJg=='); // 加密后的字符串
$privateKey = '-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----'; // 私钥
openssl_private_decrypt($cipher, $plain, $privateKey); // 解密数据
echo $plain; // 输出解密后的字符串

上記のコードでは、最初に openssl_pkey_export 関数を使用して秘密キーの文字列形式を取得し、次に openssl_private_decrypt 関数を使用して秘密キーを復号化します。暗号化されたデータを取得し、元の平文を取得します。

概要:

上記の紹介を通じて、PHP では mcrypt および openssl 拡張ライブラリを使用して対称暗号化および非対称暗号化を実装できることがわかりました。アプリケーション シナリオのさまざまな暗号化要件に応じて、さまざまな暗号化アルゴリズムと暗号化方式の使用を柔軟に選択できます。もちろん、実際の暗号化プロセスでは、データのセキュリティを確保するためのキーの保護と管理にも注意を払う必要があります。

以上がPHP で対称暗号化と非対称暗号化を行うにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。