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

Patricia Arquette
リリース: 2024-11-05 07:31:01
オリジナル
693 人が閲覧しました

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

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