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

mcryptを使用してPHPでCryptoJSで暗号化されたパスワードを復号化する方法?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-05 07:31:01739ブラウズ

How to Decrypt CryptoJS Encrypted Passwords in PHP Using mcrypt?

mcrypt を使用した PHP での CryptoJS 暗号化パスワードの復号化

問題ステートメント

JavaScript では、パスワードを利用して CryptoJS を使用して暗号化されたユーザー パスワードが作成されます。キーと IV の両方に基づいたキー導出。ただし、mcrypt ライブラリを使用した PHP サーバーでの復号化の試行は失敗し、意味のない復号化文字列が生成されました。

解決策

主なエラーは、JavaScript (CryptoJS) で採用されている異なる暗号化方式に起因します。 ) および PHP (mcrypt)。 CryptoJS では、キーと IV はパスワードから派生しますが、mcrypt は暗号化/復号化のためにパスワードのみに依存します。これを修正するには、CryptoJS で使用されているのと同様の手法を使用して、キーと IV を PHP で生成する必要があります。

改訂された JavaScript コード

saltHex および cipherTextHex パラメータを PHP サーバーに転送し、強化された JavaScript 暗号化プロセスが実装されました:

<code class="javascript">var encryptedPassword = CryptoJS.AES.encrypt(password, "Secret Passphrase");
var ivHex = encryptedPassword.iv.toString();
var saltHex = encryptedPassword.salt.toString(); 
var cipherTextHex = encryptedPassword.ciphertext.toString();</code>

PHP でのキーと IV の導出

次の PHP 関数は、パスワードとソルトからキーと IV を導出します:

<code class="php">function evpKDF($password, $salt, $keySize = 8, $ivSize = 4, $iterations = 1, $hashAlgorithm = "md5") {
    /* ... code for key and IV derivation ... */
    return [
        "key" => substr($derivedBytes, 0, $keySize * 4),
        "iv"  => substr($derivedBytes, $keySize * 4, $ivSize * 4)
    ];
}</code>

mcrypt を使用した PHP での復号化

派生キーと IV を使用して、PHP で復号化が実行されます。

<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 を使用した PHP での復号化 (代替方法)

OpenSSL 拡張機能の使用は、復号化の代替手段です。

<code class="php">$decryptPassword = openssl_decrypt(
        substr($ciphertext, 16), 
        "aes-256-cbc",
        $keyAndIV["key"], 
        OPENSSL_RAW_DATA, 
        $keyAndIV["iv"]);</code>

これらの変更により、JavaScript と PHP の間でユーザー パスワードのシームレスな暗号化と復号化が可能になり、安全なデータ処理が保証されます。

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

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