>  기사  >  백엔드 개발  >  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 암호화 및 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.