ホームページ > バックエンド開発 > PHPチュートリアル > PHP で CryptoJS で暗号化されたパスワードを復号化する方法は?

PHP で CryptoJS で暗号化されたパスワードを復号化する方法は?

DDD
リリース: 2024-11-03 16:56:02
オリジナル
975 人が閲覧しました

How to Decrypt a Password Encrypted with CryptoJS in PHP?

JavaScript 暗号化のための PHP による復号化のトラブルシューティング

JavaScript で暗号化されたパスワードを CryptoJS を使用して復号化し、PHP サーバー上で mcrypt_decrypt() を使用して復号化しようとすると、復号化されたパスワードが破損するという問題が発生しました。これは、mcrypt_decrypt() に指定されたパラメーターが正しくないためです。

この問題を解決するには、CryptoJS と mcrypt_decrypt() の暗号化の処理方法の違いを理解する必要があります。 CryptoJS は、var encryptedPassword = CryptoJS.AES.encrypt(password, "Secret Passphrase") で指定されたパスフレーズを使用して、AES 暗号化の暗号化キーと初期化ベクトル (IV) の両方を生成します。

一方、 mcrypt_decrypt() はパスフレーズを暗号化キーとしてのみ使用します。これは、PHP で暗号文を正常に復号化するには、CryptoJS と同じ方法でキーと IV を導出する必要があることを意味します。

次のコードは、この問題に対処する方法を示しています。

<code class="php">$saltHex = $_POST['salt'];  // Received from the JavaScript request
$ciphertextHex = $_POST['ciphertext'];  // Received from the JavaScript request

// Convert salt from hex to binary
$salt = hex2bin($saltHex);

function evpKDF($password, $salt, $keySize, $ivSize) {
    $hasher = hash_init('sha256');
    hash_update($hasher, $password);
    hash_update($hasher, $salt);
    $derivedBytes = hash_final($hasher, TRUE);

    return array(
        "key" => substr($derivedBytes, 0, $keySize),
        "iv" => substr($derivedBytes, $keySize, $ivSize)
    );
}

// Derive key and IV from passphrase and salt
$keyAndIV = evpKDF("Secret Passphrase", $salt, 16, 16);

// Decrypt ciphertext using mcrypt_decrypt()
$decryptPassword = mcrypt_decrypt(MCRYPT_RIJNDAEL_128,
    $keyAndIV["key"],
    hex2bin($ciphertextHex),
    MCRYPT_MODE_CBC,
    $keyAndIV["iv"]);</code>
ログイン後にコピー

CryptoJS と同じ方法でキーと IV を導出することで、復号化プロセスが正しく実行され、復号化されたパスワードが正確であることが保証されます。

以上がPHP で CryptoJS で暗号化されたパスワードを復号化する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート