This articles has been requested to be deleted.
In diesem Artikel stelle ich kurz das umfangreiche MCrypt-Modul zur Verschlüsselung von sensiblen Daten (wie z.B. Passwörtern in Cookies) vor.
In der Zeit des modernen Webs wird Sicherheit immer wichtiger. Immer mehr Programme und Websiten versuchen, durch die Cookies im Browser an sensible Daten ihres Besitzers zu gelangen. Noch Fataler als bei Passwörtern wird es, wenn Kontodaten oder -verbindungen abgespeichert werden- da muss schnell die Polizei eingeschaltet werden.
Doch je besser die Diebe werden, desto weiter entwickelt sich auch die Software, sich vor diesen Kriminellen zu schützen. Immer kompliziertere Verschlüsselungsverfahren mit eigenen Keys machen das Ausspionieren von Daten immer schwerer- eines dieser Verschlüsselungsmodule nennt sich MCrypt.
Da dies ein Zusatzmodul zu PHP ist und bei den meisten nicht von Beginn an integriert ist, muss es noch im nachhinein installiert werden. Da es dazu eine gute,
Deutschsprachige Anleitung auf PHP.net gibt, werde ich zur Installation hier nichts mehr beitragen.
Zur initialisierung dieses Moduls gibt es in PHP die Funktion
mcrypt_module_open:
|
PHP Quellcode
|
1
|
$mcrypt = mcrypt_module_open('blowfish', '', 'cfb', '');
|
Im ersten Parameter wird der Name des verwendeten Algorithmus eingefügt.
Beispiel:
mcrypt_module_open('blowfish', '', 'cfb', '');
Im zweiten Parameter wird der Pfad zur MCrypt-Installation eingegeben (üblicherweise /usr/local/lib/lib/mcrypt). Wird dieser Parameter nicht übergeben, so wird automatisch nach der Installation gesucht/die Einstellungen aus der php.ini übernommen.
Im dritten Parameter wird der verwendete Modus angegeben.
Beispiel:
mcrypt_module_open('blowfish', '', 'cfb', '');
Im dritten Parameter wird ebenfalls der Pfad zur MCrypt-Installation angegeben. Wird dieser Parameter leer gelassen, so wird ebenfalls nach dem Installationspfad gesucht.
Zur Verschlüsselung eines Textes werden nach der Initialisierung die Funktionen
mcrypt_create_iv,
mcrypt_enc_get_iv_size,
mcrypt_generic_init[i][i][i], [/i][/i]
mcrypt_generic [/i] und
mcrypt_generic_deinit benötigt.
Beispiel für eine Verschlüsselung:
|
PHP Quellcode
|
1
2
3
4
5
6
7
8
9
|
$key = 'Dies ist ein Key, mit dem der Text verschluesselt wird.';
$text = 'Dies ist der zu verschluesselnde Text.';
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($mcrypt), MCRYPT_RAND);
mcrypt_generic_init($mcrypt, $key, $iv);
$crypted = mcrypt_generic($mcrypt, $text);
mcrypt_generic_deinit($mcrypt);
echo $crypted;
//Ausgabe bei der hier verwendeten Verschlüsselung: 0ΩģÓ`ì@6J 'º]Ã‰çØ©ì}m,bRÖ¶—jЙ¢(+
|
Mit jeder Anfrage wird der verschlüsselte Text ein anderer, da durch MCRYPT_RAND (Erklärung weiter hinten) zu dem Schlüssel ($key) ein Zufallswert hinzugefügt wird.
|
PHP Quellcode
|
1
|
mcrypt_create_iv($size, $source = MCRYPT_DEV_RANDOM);
|
Im ersten Parameter wird die Größe des MCrypts angegeben. Dieser kann optimalerweise mit mcrypt_get_iv_size($mcrypt); angegeben werden.
Der zweite Parameter ist optional. Hier wird ein Quellverzeichniss angegeben, wobei von mir ausdrücklich empfohlen wird, MCRYPT_RAND anzugeben, da die anderen möglichen Angaben (MCRYPT_DEV_RANDOM, MCRYPT_DEV_URANDOM) nicht von Windows-Servern unterstützt werden.
Diese Funktion gibt die Größe von $mcrypt zurück.
|
PHP Quellcode
|
1
|
mcrypt_get_iv_size($mcrypt);
|
Diese Funktion muss aufgerufen werden, bevor der Text verschlüsselt werden kann.
|
PHP Quellcode
|
1
|
mcrypt_generic_init($mcrypt, $key, $iv);
|
$mcrypt: Der MCrypt-Handler (Rückgabewert der Funktion mcrypt_module_open()).
$key: Ein beliebiger Schlüssel, mit dem der Text verschlüsselt werden soll.
$iv: Das initialation vector- Objekt (Rückgabewert der Funktion mcrypt_create_iv()).
Verschlüsselt den angegebenen Text.
|
PHP Quellcode
|
1
|
$crypted = mcrypt_generic($mcrypt, $text);
|
$mcrypt: Der MCrypt-Handler (Rückgabewert der Funktion mcrypt_module_open()).
$text: Der zu verschlüsselnde Text (z.B. ein Passwort).
Diese Funktion beendet den Verschlüsselungsvorgang.
|
PHP Quellcode
|
1
|
mcrypt_generic_deinit($mcrypt);
|
$mcrypt: Der MCrypt-Handler (Rückgabewert der Funktion mcrypt_module_open()).
Für mein Framework habe ich eine eigene McryptUtil-Klasse definiert, die den Einsatz von Mcrypt erleichtert und den Code auf bis zu 3 Zeilen minimiert.
Diese Funktion öffnet ein neues Mcrypt-Modul.
Verwendungsweise:
|
PHP Quellcode
|
1
|
McryptUtil::open($algorithmus = 'blowfish', $mode = 'cfb');
|
$algorithm: Der zu verwendende Verschlüsselungs-Algorithmus.
$mode: Der zu verwendende Verschlüsselungsmodus.
Diese Funktion verschlüsselt einen Text.
Verwendungsweise:
|
PHP Quellcode
|
1
|
$crypted = McryptUtil::encrypt($text, $key);
|
$text: Der zu verschlüsselnde Text.
$key: Der bei der Verschlüsselung verwendete Schlüssel.
Rückgabewert: Der verschlüsselte Text.
Entschlüsselt einen verschlüsselten Text.
Verwendungsweise:
|
PHP Quellcode
|
1
|
$encrypted = McryptUtil::decrypt($crypted, $key);
|
$crypted: Der verschlüsselte Text.
$key: Der bei der Verschlüsselung verwendete Schlüssel.
Rückgabewert: Der entschlüsselte Text.
|
PHP Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
$text = 'Dieser Text soll verschlüsselt werden!';
$key = 'Dies ist der Schlüssel, der bei der Verschlüsselung verwendet werden soll!';
$mcrypt = mcrypt_module_open('blowfish', '', 'cfb', '');
$ivsize = mcrypt_get_iv_size($mcrypt);
//Verschlüsselung
$iv = mcrypt_create_iv($ivsize, MCRYPT_RAND);
mcrypt_generic_init($mcrypt, $key, $iv);
$crypted = mcrypt_generic($mcrypt, $text);
mcrypt_generic_deinit($mcrypt);
echo $iv.$crypted; //Unidentifizierbare Anreihung von Sonderzeichen
//Entschlüsselung
$iv = substr($crypted, 0, $ivsize);
$crypted = substr($crypted, $ivsize);
mcrypt_generic_init($mcrypt, $key, $iv);
$encrypted = mdecrypt_generic($mcrypt, $crypted);
mcrypt_generic_deinit($mcrypt);
echo $encrypted; //"Dieser Text soll verschlüsselt werden!"
|
|
PHP Quellcode
|
1
2
3
4
5
6
7
8
|
$text = 'Dieser Text soll verschlüsselt werden!';
$key = 'Dies ist der Schlüssel, der bei der Verschlüsselung verwendet werden soll!';
McryptUtil::open();
$crypted = McryptUtil::encrypt($text, $key);
echo $crypted; //Unidentifizierbare Anreihung von Sonderzeichen
$encrypted = McryptUtil::decrypt($crypted, $key);
echo $encrypted; //"Dieser Text soll verschlüsselt werden!"
|
- Ist Mcrypt installiert?
- Ist der Key bei der Entschlüsselung identisch mit dem Key bei der Verschlüsselung?