Heim  >  Artikel  >  Backend-Entwicklung  >  Wie entschlüssele ich mit CryptoJS verschlüsselte Passwörter in PHP mit mcrypt?

Wie entschlüssele ich mit CryptoJS verschlüsselte Passwörter in PHP mit mcrypt?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-05 07:31:01693Durchsuche

How to Decrypt CryptoJS Encrypted Passwords in PHP Using mcrypt?

Entschlüsseln von mit CryptoJS verschlüsselten Passwörtern in PHP mit mcrypt

Problemstellung

In JavaScript wird mit CryptoJS ein verschlüsseltes Benutzerpasswort erstellt, wobei Passwort- basierte Schlüsselableitung sowohl für den Schlüssel als auch für IV. Allerdings sind Entschlüsselungsversuche auf dem PHP-Server unter Verwendung der mcrypt-Bibliothek fehlgeschlagen, was zu unsinnigen entschlüsselten Zeichenfolgen führte.

Lösung

Der Hauptfehler ergibt sich aus den unterschiedlichen Verschlüsselungsmethoden, die in JavaScript (CryptoJS) verwendet werden ) und PHP (mcrypt). In CryptoJS werden Schlüssel und IV vom Passwort abgeleitet, während mcrypt zur Ver-/Entschlüsselung ausschließlich auf dem Passwort basiert. Um dies zu beheben, müssen der Schlüssel und der IV in PHP mit einer ähnlichen Technik wie in CryptoJS generiert werden.

Überarbeiteter JavaScript-Code

Übertragung der Parameter saltHex und cipherTextHex an den PHP-Server, an Der verbesserte JavaScript-Verschlüsselungsprozess ist jetzt implementiert:

<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>

Ableitung von Schlüssel und IV in PHP

Die Die folgende PHP-Funktion leitet Schlüssel und IV aus einem Passwort und Salt ab:

<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>

Entschlüsselung in PHP mit mcrypt

Ausgerüstet mit dem abgeleiteten Schlüssel und IV wird die Entschlüsselung in PHP durchgeführt:

<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>

Entschlüsselung in PHP mit OpenSSL (alternative Methode)

Die Verwendung der OpenSSL-Erweiterung ist eine Alternative zur Entschlüsselung:

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

Mit diesen Modifikationen ist nun eine nahtlose Ver- und Entschlüsselung des Benutzerpassworts zwischen JavaScript und PHP möglich und gewährleistet so eine sichere Datenverarbeitung.

Das obige ist der detaillierte Inhalt vonWie entschlüssele ich mit CryptoJS verschlüsselte Passwörter in PHP mit mcrypt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn