ホームページ  >  記事  >  バックエンド開発  >  PHP で JavaScript CryptoJS AES 暗号化データを復号化する方法

PHP で JavaScript CryptoJS AES 暗号化データを復号化する方法

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-02 11:09:31193ブラウズ

How to Decrypt JavaScript CryptoJS AES Encrypted Data in PHP?

JavaScript での暗号化と PHP での復号化

問題

ユーザーが CryptoJS AES 暗号化を使用して JavaScript でパスワードを暗号化しています

解決策

この不一致は、JavaScript で暗号化キーと初期化ベクトル (IV) を導出するために使用されるメソッドから発生します。 PHP。 CryptoJS はパスワードを使用してこれらの値を取得しますが、PHP の mcrypt_decrypt() はキーのみを必要とします。

PHP 復号化の実装

暗号文を正しく復号化するには、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 を使用した代替実装

または、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 サイトの他の関連記事を参照してください。

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