ホームページ  >  記事  >  バックエンド開発  >  PHP でデータを安全に暗号化し、CryptoJS を使用して復号化する方法

PHP でデータを安全に暗号化し、CryptoJS を使用して復号化する方法

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-21 12:39:16671ブラウズ

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

PHP で暗号化、JavaScript (cryptojs) で復号化

問題文:

あなた基本的な暗号化/復号化、特に PHP での暗号化と PHP での復号化に関する課題に直面しています。 cryptojs を使用した Javascript。

説明:

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。