Entschlüsselung der AES-Verschlüsselung in PHP mit MCrypt
In diesem Szenario wird ein Passwort mit CryptoJS in JavaScript verschlüsselt und muss auf dem entschlüsselt werden serverseitig mit PHP unter Verwendung von MCrypt. So erreichen Sie dies:
Der vorherige Versuch, das Passwort mit der mcrypt_decrypt()-Funktion von MCrypt zu entschlüsseln, schlug aufgrund von Unterschieden bei der Schlüsselgenerierung fehl. CryptoJS verwendet ein Passwort, um sowohl den AES-Schlüssel als auch den Initialisierungsvektor (IV) zu erstellen, während MCrypt den Schlüssel nur zur Ver-/Entschlüsselung verwendet.
Um dieses Problem zu beheben, Wir müssen den Schlüssel und IV in PHP mit der gleichen Methode wie CryptoJS ableiten. Hier ist eine benutzerdefinierte evpKDF()-Funktion für diesen Zweck:
<code class="php">function evpKDF($password, $salt, $keySize = 8, $ivSize = 4, $iterations = 1, $hashAlgorithm = "md5") { // Code goes here... }</code>
Um die evpKDF()-Funktion zu verwenden, sollte das verschlüsselte Passwort in JavaScript einen generierten Salt enthalten. Hier ist der aktualisierte CryptoJS-Code:
<code class="javascript"> var encryptedPassword = CryptoJS.AES.encrypt(password, "Secret Passphrase"); var ivHex = encryptedPassword.iv.toString(); var ivSize = encryptedPassword.algorithm.ivSize; // same as blockSize var keySize = encryptedPassword.algorithm.keySize; var keyHex = encryptedPassword.key.toString(); var saltHex = encryptedPassword.salt.toString(); // must be sent var openSslFormattedCipherTextString = encryptedPassword.toString(); // not used var cipherTextHex = encryptedPassword.ciphertext.toString(); // must be sent</code>
Rufen Sie auf der Serverseite in PHP das Salt und den Chiffretext aus der Anfrage ab. Verwenden Sie dann die Funktion evpKDF(), um den Schlüssel und den IV basierend auf dem Passwort und Salt abzuleiten:
<code class="php">$keyAndIV = evpKDF("Secret Passphrase", hex2bin($saltHex));</code>
Führen Sie abschließend die Entschlüsselung mit MCrypt durch:
<code class="php">$decryptPassword = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $keyAndIV["key"], hex2bin($cipherTextHex), MCRYPT_MODE_CBC, $keyAndIV["iv"]);</code>
Dies sollte erfolgreich entschlüsselt werden das mit CryptoJS mit AES verschlüsselte Passwort. Darüber hinaus wird eine Version mit der OpenSSL-Erweiterung als Alternative zu MCrypt bereitgestellt.
Das obige ist der detaillierte Inhalt vonWie entschlüssele ich die AES-Verschlüsselung in PHP mit MCrypt mithilfe von evpKDF()?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!