如何在 PHP 中安全地加密数据并使用 CryptoJS 解密?

Linda Hamilton
发布: 2024-11-21 12:39:16
原创
670 人浏览过

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

使用 PHP 加密,使用 Javascript (cryptojs) 解密

问题陈述:

你面临基本加密/解密的挑战,特别是涉及 PHP 中的加密和 Javascript 中的解密cryptojs.

澄清:

您的 PHP 代码包含使用 mcrypt 库和 base64 编码进行加密。同时,您的 Javascript 代码尝试使用 CryptoJS 解密加密文本,但您遇到了困难。

解决方案:

提供的代码包含过时的加密技术,特别是 mcrypt,不再推荐使用。为了实现您的加密/解密目标,您可以利用 PHP openssl 库中实现的 AES 加密。

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解密实现:

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

用法示例:

$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'
登录后复制

这种方法确保 PHP 和 Javascript 之间安全且可互操作的加密/解密,利用最新的加密技术并保持与 cryptojs 的兼容性。

以上是如何在 PHP 中安全地加密数据并使用 CryptoJS 解密?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板