MCrypt を使用した PHP での AES 暗号化の復号化
このシナリオでは、パスワードは JavaScript で CryptoJS を使用して暗号化されており、 MCryptを使用したPHPのサーバー側。これを実現する方法は次のとおりです。
MCrypt の mcrypt_decrypt() 関数を使用してパスワードを復号化する前回の試みは、キー生成の違いにより失敗しました。 CryptoJS はパスワードを利用して AES キーと初期化ベクター (IV) の両方を作成しますが、MCrypt は暗号化/復号化にのみキーを使用します。
これを解決するには、 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 のサーバー側で、リクエストからソルトと暗号文を取得します。次に、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 サイトの他の関連記事を参照してください。