In JavaScript wird mit CryptoJS ein verschlüsseltes Benutzerpasswort erstellt, wobei Passwort- basierte Schlüsselableitung sowohl für den Schlüssel als auch für IV. Allerdings sind Entschlüsselungsversuche auf dem PHP-Server unter Verwendung der mcrypt-Bibliothek fehlgeschlagen, was zu unsinnigen entschlüsselten Zeichenfolgen führte.
Der Hauptfehler ergibt sich aus den unterschiedlichen Verschlüsselungsmethoden, die in JavaScript (CryptoJS) verwendet werden ) und PHP (mcrypt). In CryptoJS werden Schlüssel und IV vom Passwort abgeleitet, während mcrypt zur Ver-/Entschlüsselung ausschließlich auf dem Passwort basiert. Um dies zu beheben, müssen der Schlüssel und der IV in PHP mit einer ähnlichen Technik wie in CryptoJS generiert werden.
Übertragung der Parameter saltHex und cipherTextHex an den PHP-Server, an Der verbesserte JavaScript-Verschlüsselungsprozess ist jetzt implementiert:
<code class="javascript">var encryptedPassword = CryptoJS.AES.encrypt(password, "Secret Passphrase"); var ivHex = encryptedPassword.iv.toString(); var saltHex = encryptedPassword.salt.toString(); var cipherTextHex = encryptedPassword.ciphertext.toString();</code>
Die Die folgende PHP-Funktion leitet Schlüssel und IV aus einem Passwort und Salt ab:
<code class="php">function evpKDF($password, $salt, $keySize = 8, $ivSize = 4, $iterations = 1, $hashAlgorithm = "md5") { /* ... code for key and IV derivation ... */ return [ "key" => substr($derivedBytes, 0, $keySize * 4), "iv" => substr($derivedBytes, $keySize * 4, $ivSize * 4) ]; }</code>
Ausgerüstet mit dem abgeleiteten Schlüssel und IV wird die Entschlüsselung in PHP durchgeführt:
<code class="php">$keyAndIV = evpKDF("Secret Passphrase", hex2bin($saltHex)); $decryptPassword = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $keyAndIV["key"], hex2bin($cipherTextHex), MCRYPT_MODE_CBC, $keyAndIV["iv"]);</code>
Die Verwendung der OpenSSL-Erweiterung ist eine Alternative zur Entschlüsselung:
<code class="php">$decryptPassword = openssl_decrypt( substr($ciphertext, 16), "aes-256-cbc", $keyAndIV["key"], OPENSSL_RAW_DATA, $keyAndIV["iv"]);</code>
Mit diesen Modifikationen ist nun eine nahtlose Ver- und Entschlüsselung des Benutzerpassworts zwischen JavaScript und PHP möglich und gewährleistet so eine sichere Datenverarbeitung.
Das obige ist der detaillierte Inhalt vonWie entschlüssele ich mit CryptoJS verschlüsselte Passwörter in PHP mit mcrypt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!