JavaScript での暗号化と PHP での復号化
ユーザーが CryptoJS AES 暗号化を使用して JavaScript でパスワードを暗号化しています
この不一致は、JavaScript で暗号化キーと初期化ベクトル (IV) を導出するために使用されるメソッドから発生します。 PHP。 CryptoJS はパスワードを使用してこれらの値を取得しますが、PHP の mcrypt_decrypt() はキーのみを必要とします。
暗号文を正しく復号化するには、PHP コードは暗号化キーと IV を次から取得する必要があります。 JavaScript コードと同じ方法でパスワードとソルトを入力します。これは、ハッシュベースのキー導出関数 (HKDF) を実装する evpKDF() のような関数を使用して実現できます。
<code class="php">function evpKDF($password, $salt, $keySize = 8, $ivSize = 4, $iterations = 1, $hashAlgorithm = "md5") { // ... Implementation ... }</code>
キーと IV が導出されたら、次のように mcrypt_decrypt() を呼び出すことができます。 :
<code class="php">$keyAndIV = evpKDF("Secret Passphrase", hex2bin($saltHex)); $decryptPassword = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $keyAndIV["key"], hex2bin($cipherTextHex), MCRYPT_MODE_CBC, $keyAndIV["iv"]);</code>
または、OpenSSL 拡張機能を使用して暗号文を復号化することもできます:
<code class="php">function decrypt($ciphertext, $password) { $ciphertext = base64_decode($ciphertext); if (substr($ciphertext, 0, 8) != "Salted__") { return false; } $salt = substr($ciphertext, 8, 8); $keyAndIV = evpKDF($password, $salt); $decryptPassword = openssl_decrypt( substr($ciphertext, 16), "aes-256-cbc", $keyAndIV["key"], OPENSSL_RAW_DATA, // base64 was already decoded $keyAndIV["iv"]); return $decryptPassword; }</code>
以上がPHP で JavaScript CryptoJS AES 暗号化データを復号化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。