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