Maison >développement back-end >tutoriel php >Comment décrypter un mot de passe crypté avec CryptoJS en PHP ?

Comment décrypter un mot de passe crypté avec CryptoJS en PHP ?

DDD
DDDoriginal
2024-11-03 16:56:02958parcourir

How to Decrypt a Password Encrypted with CryptoJS in PHP?

Dépannage du décryptage avec PHP pour le cryptage JavaScript

Dans votre tentative de déchiffrer un mot de passe crypté en JavaScript à l'aide de CryptoJS et de le déchiffrer sur le serveur PHP avec mcrypt_decrypt(), vous J'ai rencontré un problème où le mot de passe déchiffré est corrompu. En effet, les paramètres fournis à mcrypt_decrypt() sont incorrects.

Pour résoudre ce problème, vous devez comprendre les différences dans la façon dont CryptoJS et mcrypt_decrypt() gèrent le cryptage. CryptoJS utilise la phrase secrète fournie dans var selectedPassword = CryptoJS.AES.encrypt(password, "Secret Passphrase") pour générer à la fois la clé de chiffrement et le vecteur d'initialisation (IV) pour le chiffrement AES.

D'autre part, mcrypt_decrypt() utilise uniquement la phrase secrète comme clé de cryptage. Cela signifie que vous devez dériver la clé et l'IV de la même manière que CryptoJS afin de réussir à déchiffrer le texte chiffré en PHP.

Le code suivant montre comment résoudre ce problème :

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

En dérivant la clé et l'IV de la même manière que CryptoJS, vous vous assurez que le processus de décryptage est effectué correctement et que le mot de passe déchiffré est exact.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn