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 중국어 웹사이트의 기타 관련 기사를 참조하세요!