PHP 7.2 - Mcrypt durch OpenSSL ersetzen

Thema: Replace mcrypt_encrypt mit openssl_encrypt in PHP

Hallo liebe Leser,
die Zeit schreitet voran und mittlerweile gibt es seit Ende 2018 auch PHP 7.3. Was viele Leute aber bis heute nicht getan haben ist die Migration Ihres alten Verschlüsselungscodes basierend auf der mcrypt Library zu etwas modernerem wie OpenSSL, welches seit PHP 7.2 als Standard implementiert wurde und mcrypt abgelöst hat. In PHP7.2 wurde außerdem die Krypto-Library LibSodium integriert welche moderne und starke Verschlüsselungsmethoden zur Verfügung stellt.

Mcrypt Beispiel ersetzen mit OpenSSL

Vor uns liegt nun ein typisches MCrypt Beispiel Konstrukt welches wir zu OpenSSL Abwärtskompatibel portieren möchten.

Mcrypt Code:


Der equivalente OpenSSL PHP Code dazu würde wie folgt aussehen:

OpenSSL Code:


Wie Ihr sehen könnt, hat sich bei OpenSSL die Methode geändert, in diesem Fall entspricht 'aes-128-cbc' der Mcrypt Methode 'cbc'. Wenn diese Option 'OPENSSL_RAW_DATA' gesetzt ist gibt openssl_encrypt lediglich die Rohdaten zurück. Denn standardmäßig macht openssl_encrypt schon ein base64_encode auf das Ergebnis, wird die Option gesetzt geschieht dies nicht automatisch.

Das Beispiel ist relativ einfach gehalten um die grundlegende Mechanik und den Unterschied deutlich sichtbar zu machen. Außerdem wird empfohlen einen zufälligen IV zu generieren und einen Schlüssel mit entsprechender länge.

Für tiefgründigeres Wissen über OpenSSL in PHP empfehle ich die Dokumentation auf PHP.net, dort erfahrt Ihr ausführlich erklärt alle Einzelheiten über die verfügbaren OpenSSL Funktionen in PHP.

Falls Ihr gute oder schlechte Erfahrungen mit OpenSSL oder Mcrypt in PHP gemacht habt dann hinterlasst doch ein Kommentar. Ansonsten hoffe ich das euch dieser Artikel ein Schritt in die richtige Richtung weisen konnte.