Comment décrypter le cryptage AES en PHP avec MCrypt en utilisant evpKDF() ?

DDD
Libérer: 2024-11-03 02:02:02
original
347 Les gens l'ont consulté

How to Decrypt AES Encryption in PHP with MCrypt Using evpKDF()?

Déchiffrement du cryptage AES en PHP avec MCrypt

Dans ce scénario, un mot de passe est crypté à l'aide de CryptoJS en JavaScript et doit être déchiffré sur le côté serveur avec PHP en utilisant MCrypt. Voici comment y parvenir :

Problème de décryptage en PHP

La tentative précédente de déchiffrement du mot de passe à l'aide de la fonction mcrypt_decrypt() de MCrypt a échoué en raison de différences dans la génération de clé. CryptoJS utilise un mot de passe pour créer à la fois la clé AES et le vecteur d'initialisation (IV), tandis que MCrypt utilise uniquement la clé pour le cryptage/déchiffrement.

Solution avec la fonction evpKDF()

Pour résoudre ce problème, nous devons dériver la clé et IV en PHP en utilisant la même méthode que CryptoJS. Voici une fonction evpKDF() personnalisée à cet effet :

<code class="php">function evpKDF($password, $salt, $keySize = 8, $ivSize = 4, $iterations = 1, $hashAlgorithm = "md5") {
    // Code goes here...
}</code>
Copier après la connexion

Processus de cryptage modifié

Pour utiliser la fonction evpKDF(), le mot de passe crypté en JavaScript doit inclure un sel généré. Voici le code CryptoJS mis à jour :

<code class="javascript">    var encryptedPassword = CryptoJS.AES.encrypt(password, "Secret Passphrase");
    var ivHex = encryptedPassword.iv.toString();
    var ivSize = encryptedPassword.algorithm.ivSize; // same as blockSize
    var keySize = encryptedPassword.algorithm.keySize;
    var keyHex = encryptedPassword.key.toString();
    var saltHex = encryptedPassword.salt.toString(); // must be sent
    var openSslFormattedCipherTextString = encryptedPassword.toString(); // not used
    var cipherTextHex = encryptedPassword.ciphertext.toString(); // must be sent</code>
Copier après la connexion

Processus de décryptage en PHP

Côté serveur en PHP, récupérez le sel et le texte chiffré de la requête. Ensuite, utilisez la fonction evpKDF() pour dériver la clé et l'IV en fonction du mot de passe et du sel :

<code class="php">$keyAndIV = evpKDF("Secret Passphrase", hex2bin($saltHex));</code>
Copier après la connexion

Enfin, effectuez le décryptage avec MCrypt :

<code class="php">$decryptPassword = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, 
        $keyAndIV["key"], 
        hex2bin($cipherTextHex), 
        MCRYPT_MODE_CBC, 
        $keyAndIV["iv"]);</code>
Copier après la connexion

Cela devrait réussir à décrypter le mot de passe crypté à l'aide de CryptoJS avec AES. De plus, une version utilisant l'extension OpenSSL est fournie comme alternative à MCrypt.

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal