Wie entschlüssele ich die AES-Verschlüsselung in PHP mit MCrypt mithilfe von evpKDF()?

DDD
Freigeben: 2024-11-03 02:02:02
Original
347 Leute haben es durchsucht

How to Decrypt AES Encryption in PHP with MCrypt Using evpKDF()?

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:

Problem mit der Entschlüsselung in PHP

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.

Lösung mit der Funktion evpKDF()

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>
Nach dem Login kopieren

Modifizierter Verschlüsselungsprozess

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>
Nach dem Login kopieren

Entschlüsselungsprozess in PHP

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage