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

Linda Hamilton
Libérer: 2024-11-21 12:39:16
original
670 Les gens l'ont consulté

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);
}
Copier après la connexion

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;
}
Copier après la connexion

Exemple Utilisation :

$encrypted = encrypt('my passphrase', 'value to encrypt');
echo $encrypted; // Encrypted data with salt, iv, and cipher text
Copier après la connexion
var decrypted = decrypt('my passphrase', $encrypted);
console.log(decrypted); // Original 'value to encrypt'
Copier après la connexion

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal