Heim > Artikel > Backend-Entwicklung > Wie entschlüssele ich mit JavaScript verschlüsselte CryptoJS AES-Daten in PHP?
Verschlüsselung in JavaScript und Entschlüsselung in PHP
Ein Benutzer verschlüsselt ein Passwort in JavaScript mithilfe der CryptoJS-AES-Verschlüsselung und versucht, es in PHP mit mcrypt_decrypt() zu entschlüsseln, aber es werden falsche Ergebnisse erzielt.
Die Diskrepanz ergibt sich aus der Methode, die zum Ableiten des Verschlüsselungsschlüssels und des Initialisierungsvektors (IV) in JavaScript verwendet wird PHP. CryptoJS leitet diese Werte mithilfe eines Passworts ab, während mcrypt_decrypt() von PHP nur einen Schlüssel erwartet.
Um den Chiffretext korrekt zu entschlüsseln, muss der PHP-Code den Verschlüsselungsschlüssel und IV daraus ableiten das Passwort und Salt auf die gleiche Weise wie der JavaScript-Code. Dies kann mit einer Funktion wie evpKDF() erreicht werden, die die Hash-basierte Schlüsselableitungsfunktion (HKDF) implementiert.
<code class="php">function evpKDF($password, $salt, $keySize = 8, $ivSize = 4, $iterations = 1, $hashAlgorithm = "md5") { // ... Implementation ... }</code>
Sobald der Schlüssel und IV abgeleitet sind, kann mcrypt_decrypt() wie folgt aufgerufen werden :
<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>
Alternativ kann die OpenSSL-Erweiterung zum Entschlüsseln des Chiffretextes verwendet werden:
<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>
Das obige ist der detaillierte Inhalt vonWie entschlüssele ich mit JavaScript verschlüsselte CryptoJS AES-Daten in PHP?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!