Crypter avec PHP, Décrypter avec Javascript (cryptojs)
Énoncé du problème :
Vous sommes confrontés à des défis en matière de cryptage/déchiffrement de base, impliquant spécifiquement le cryptage en PHP et le décryptage en Javascript à l'aide de cryptojs.
Clarification :
Votre code PHP englobe le cryptage avec la bibliothèque mcrypt et l'encodage base64. Pendant ce temps, votre code Javascript tente de déchiffrer le texte crypté à l'aide de CryptoJS, mais vous rencontrez des difficultés.
Résolution :
Le code fourni intègre des techniques de cryptage obsolètes, notamment mcrypt, dont l'utilisation n'est plus recommandée. Pour atteindre vos objectifs de cryptage/déchiffrement, vous pouvez tirer parti du cryptage AES implémenté dans la bibliothèque openssl de PHP.
Implémentation du cryptage/déchiffrement PHP :
<?php function encrypt($passphrase, $value) { $salt = openssl_random_pseudo_bytes(8); $salted = ''; $dx = ''; while (strlen($salted) < 48) { $dx = md5($dx . $passphrase . $salt, true); $salted .= $dx; } $key = substr($salted, 0, 32); $iv = substr($salted, 32, 16); $encrypted_data = openssl_encrypt(json_encode($value), 'aes-256-cbc', $key, true, $iv); $data = array("ct" => base64_encode($encrypted_data), "iv" => bin2hex($iv), "s" => bin2hex($salt)); return json_encode($data); } function decrypt($passphrase, $jsonStr) { $j = json_decode($jsonStr, true); $cipherParams = CryptoJS.lib.CipherParams.create({ ciphertext: CryptoJS.enc.Base64.parse(j.ct) }); if (j.iv) $cipherParams.iv = CryptoJS.enc.Hex.parse(j.iv) if (j.s) $cipherParams.salt = CryptoJS.enc.Hex.parse(j.s) $key = substr($result, 0, 32); $data = openssl_decrypt($ct, 'aes-256-cbc', $key, true, $iv); return json_decode($data, true); }
Javascript Implémentation du décryptage :
function decrypt(passphrase, encryptedData) { var cipherParams = CryptoJSAesJson.parse(encryptedData); var decrypted = CryptoJS.AES.decrypt(cipherParams, passphrase, {format: CryptoJSAesJson}).toString(CryptoJS.enc.Utf8); return decrypted; }
Exemple Utilisation :
$encrypted = encrypt('my passphrase', 'value to encrypt'); echo $encrypted; // Encrypted data with salt, iv, and cipher text
var decrypted = decrypt('my passphrase', $encrypted); console.log(decrypted); // Original 'value to encrypt'
Cette approche garantit un cryptage/déchiffrement sécurisé et interopérable entre PHP et Javascript, en tirant parti des techniques de cryptage les plus récentes et en maintenant la compatibilité avec les cryptojs.
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!