如何在 PHP 中安全地加密資料並使用 CryptoJS 解密?

Linda Hamilton
發布: 2024-11-21 12:39:16
原創
695 人瀏覽過

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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板