Wie entschlüssele ich mit JavaScript verschlüsselte CryptoJS AES-Daten in PHP?

Mary-Kate Olsen
Freigeben: 2024-11-02 11:09:31
Original
192 Leute haben es durchsucht

How to Decrypt JavaScript CryptoJS AES Encrypted Data in PHP?

Verschlüsselung in JavaScript und Entschlüsselung in PHP

Problem

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.

Lösung

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.

PHP-Entschlüsselungsimplementierung

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

Alternative Implementierung mit OpenSSL

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!