Maison  >  Article  >  développement back-end  >  Comment crypter en toute sécurité des données en PHP et les décrypter à l'aide de CryptoJS ?

Comment crypter en toute sécurité des données en PHP et les décrypter à l'aide de CryptoJS ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-21 12:39:16670parcourir

How to Securely Encrypt Data in PHP and Decrypt It Using CryptoJS?

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!

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