使用 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中文网其他相关文章!