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

Mary-Kate Olsen
リリース: 2024-11-02 11:09:31
オリジナル
192 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!