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

Linda Hamilton
Release: 2024-11-21 12:39:16
Original
669 people have browsed it

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);
}
Copy after login

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;
}
Copy after login

Example Usage:

$encrypted = encrypt('my passphrase', 'value to encrypt');
echo $encrypted; // Encrypted data with salt, iv, and cipher text
Copy after login
var decrypted = decrypt('my passphrase', $encrypted);
console.log(decrypted); // Original 'value to encrypt'
Copy after login

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!

source:php.cn
Statement of this Website
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
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template