Heim >Backend-Entwicklung >PHP-Tutorial >Wie entschlüssele ich ein mit CryptoJS in PHP verschlüsseltes Passwort?

Wie entschlüssele ich ein mit CryptoJS in PHP verschlüsseltes Passwort?

DDD
DDDOriginal
2024-11-03 16:56:02954Durchsuche

How to Decrypt a Password Encrypted with CryptoJS in PHP?

Fehlerbehebung bei der Entschlüsselung mit PHP für die JavaScript-Verschlüsselung

Bei Ihrem Versuch, ein in JavaScript mit CryptoJS verschlüsseltes Passwort zu entschlüsseln und es auf dem PHP-Server mit mcrypt_decrypt() zu entschlüsseln, haben Sie Ich bin auf ein Problem gestoßen, bei dem das entschlüsselte Passwort beschädigt ist. Dies liegt daran, dass die für mcrypt_decrypt() bereitgestellten Parameter falsch sind.

Um dieses Problem zu beheben, müssen Sie die Unterschiede in der Handhabung der Verschlüsselung durch CryptoJS und mcrypt_decrypt() verstehen. CryptoJS verwendet die in var cryptoJS.AES.encrypt(password, „Secret Passphrase“) bereitgestellte Passphrase, um sowohl den Verschlüsselungsschlüssel als auch den Initialisierungsvektor (IV) für die AES-Verschlüsselung zu generieren.

Andererseits mcrypt_decrypt() verwendet nur die Passphrase als Verschlüsselungsschlüssel. Das bedeutet, dass Sie den Schlüssel und IV auf die gleiche Weise wie bei CryptoJS ableiten müssen, um den Chiffretext in PHP erfolgreich zu entschlüsseln.

Der folgende Code zeigt, wie dieses Problem behoben werden kann:

<code class="php">$saltHex = $_POST['salt'];  // Received from the JavaScript request
$ciphertextHex = $_POST['ciphertext'];  // Received from the JavaScript request

// Convert salt from hex to binary
$salt = hex2bin($saltHex);

function evpKDF($password, $salt, $keySize, $ivSize) {
    $hasher = hash_init('sha256');
    hash_update($hasher, $password);
    hash_update($hasher, $salt);
    $derivedBytes = hash_final($hasher, TRUE);

    return array(
        "key" => substr($derivedBytes, 0, $keySize),
        "iv" => substr($derivedBytes, $keySize, $ivSize)
    );
}

// Derive key and IV from passphrase and salt
$keyAndIV = evpKDF("Secret Passphrase", $salt, 16, 16);

// Decrypt ciphertext using mcrypt_decrypt()
$decryptPassword = mcrypt_decrypt(MCRYPT_RIJNDAEL_128,
    $keyAndIV["key"],
    hex2bin($ciphertextHex),
    MCRYPT_MODE_CBC,
    $keyAndIV["iv"]);</code>

Indem Sie den Schlüssel und den IV auf die gleiche Weise wie bei CryptoJS ableiten, stellen Sie sicher, dass der Entschlüsselungsprozess korrekt durchgeführt wird und das entschlüsselte Passwort korrekt ist.

Das obige ist der detaillierte Inhalt vonWie entschlüssele ich ein mit CryptoJS in PHP verschlüsseltes Passwort?. 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