Home  >  Article  >  Backend Development  >  How to Securely Encrypt Data in PHP and Decrypt It Using CryptoJS?

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

Linda Hamilton
Linda HamiltonOriginal
2024-11-21 12:39:16669browse

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

Encrypt with PHP, Decrypt with Javascript (cryptojs)

Problem Statement:

You're facing challenges in basic encryption/decryption, specifically involving encryption in PHP and decryption in Javascript using cryptojs.

Clarification:

Your PHP code encompasses encryption with the mcrypt library and base64 encoding. Meanwhile, your Javascript code attempts to decrypt the encrypted text using CryptoJS, but you encounter difficulties.

Resolution:

The provided code incorporates outdated encryption techniques, specifically mcrypt, which is no longer recommended for use. To achieve your encryption/decryption goals, you can leverage AES encryption implemented in PHP's openssl library.

PHP Encryption/Decryption Implementation:

<?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 Decryption Implementation:

function decrypt(passphrase, encryptedData) {
    var cipherParams = CryptoJSAesJson.parse(encryptedData);
    var decrypted = CryptoJS.AES.decrypt(cipherParams, passphrase, {format: CryptoJSAesJson}).toString(CryptoJS.enc.Utf8);
    return decrypted;
}

Example Usage:

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

This approach ensures secure and interoperable encryption/decryption between PHP and Javascript, leveraging up-to-date encryption techniques and maintaining compatibility with cryptojs.

The above is the detailed content of How to Securely Encrypt Data in PHP and Decrypt It Using CryptoJS?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn