ホームページ  >  記事  >  バックエンド開発  >  evpKDF() を使用して MCrypt を使用して PHP で AES 暗号化を復号する方法?

evpKDF() を使用して MCrypt を使用して PHP で AES 暗号化を復号する方法?

DDD
DDDオリジナル
2024-11-03 02:02:02348ブラウズ

How to Decrypt AES Encryption in PHP with MCrypt Using evpKDF()?

MCrypt を使用した PHP での AES 暗号化の復号化

このシナリオでは、パスワードは JavaScript で CryptoJS を使用して暗号化されており、 MCryptを使用したPHPのサーバー側。これを実現する方法は次のとおりです。

PHP の復号化に関する問題

MCrypt の mcrypt_decrypt() 関数を使用してパスワードを復号化する前回の試みは、キー生成の違いにより失敗しました。 CryptoJS はパスワードを利用して AES キーと初期化ベクター (IV) の両方を作成しますが、MCrypt は暗号化/復号化にのみキーを使用します。

evpKDF() 関数による解決策

これを解決するには、 CryptoJS と同じ方法を使用して、PHP でキーと IV を導出する必要があります。この目的のためのカスタム evpKDF() 関数は次のとおりです。

<code class="php">function evpKDF($password, $salt, $keySize = 8, $ivSize = 4, $iterations = 1, $hashAlgorithm = "md5") {
    // Code goes here...
}</code>

変更された暗号化プロセス

evpKDF() 関数を使用するには、JavaScript の暗号化されたパスワードに生成されたソルトが含まれている必要があります。更新された CryptoJS コードは次のとおりです。

<code class="javascript">    var encryptedPassword = CryptoJS.AES.encrypt(password, "Secret Passphrase");
    var ivHex = encryptedPassword.iv.toString();
    var ivSize = encryptedPassword.algorithm.ivSize; // same as blockSize
    var keySize = encryptedPassword.algorithm.keySize;
    var keyHex = encryptedPassword.key.toString();
    var saltHex = encryptedPassword.salt.toString(); // must be sent
    var openSslFormattedCipherTextString = encryptedPassword.toString(); // not used
    var cipherTextHex = encryptedPassword.ciphertext.toString(); // must be sent</code>

PHP の復号化プロセス

PHP のサーバー側で、リクエストからソルトと暗号文を取得します。次に、evpKDF() 関数を使用して、パスワードとソルトに基づいてキーと IV を取得します。

<code class="php">$keyAndIV = evpKDF("Secret Passphrase", hex2bin($saltHex));</code>

最後に、MCrypt で復号化を実行します。

<code class="php">$decryptPassword = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, 
        $keyAndIV["key"], 
        hex2bin($cipherTextHex), 
        MCRYPT_MODE_CBC, 
        $keyAndIV["iv"]);</code>

これで正常に復号化されるはずです。 CryptoJS と AES を使用して暗号化されたパスワード。さらに、OpenSSL 拡張機能を使用したバージョンが MCrypt の代替として提供されています。

以上がevpKDF() を使用して MCrypt を使用して PHP で AES 暗号化を復号する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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