Heim > Artikel > Backend-Entwicklung > Wie verschlüssele ich Daten sicher in PHP und entschlüssele sie mit CryptoJS?
Mit PHP verschlüsseln, mit Javascript entschlüsseln (cryptojs)
Problemstellung:
Sie Sie stehen vor Herausforderungen bei der grundlegenden Verschlüsselung/Entschlüsselung, insbesondere bei der Verschlüsselung in PHP und der Entschlüsselung in Javascript unter Verwendung cryptojs.
Klarstellung:
Ihr PHP-Code umfasst die Verschlüsselung mit der mcrypt-Bibliothek und die Base64-Kodierung. In der Zwischenzeit versucht Ihr Javascript-Code, den verschlüsselten Text mit CryptoJS zu entschlüsseln, aber Sie stoßen auf Schwierigkeiten.
Lösung:
Der bereitgestellte Code enthält veraltete Verschlüsselungstechniken, insbesondere mcrypt, dessen Verwendung nicht mehr empfohlen wird. Um Ihre Verschlüsselungs-/Entschlüsselungsziele zu erreichen, können Sie die in der OpenSSL-Bibliothek von PHP implementierte AES-Verschlüsselung nutzen.
PHP-Verschlüsselung/Entschlüsselungsimplementierung:
<?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 Entschlüsselung Implementierung:
function decrypt(passphrase, encryptedData) { var cipherParams = CryptoJSAesJson.parse(encryptedData); var decrypted = CryptoJS.AES.decrypt(cipherParams, passphrase, {format: CryptoJSAesJson}).toString(CryptoJS.enc.Utf8); return decrypted; }
Beispielverwendung:
$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'
Dieser Ansatz gewährleistet eine sichere und interoperable Verschlüsselung/Entschlüsselung zwischen PHP und Javascript und nutzt diese Aktuelle Verschlüsselungstechniken und Wahrung der Kompatibilität mit Kryptojs.
Das obige ist der detaillierte Inhalt vonWie verschlüssele ich Daten sicher in PHP und entschlüssele sie mit CryptoJS?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!