Kryptografie mit PHP
Oktober 15th, 2007, um 21:13 Uhr | von Michael KarlVerschlüsselung mit PHP
Beim Basteln eines Projekts bin ich mit Kryptorafie mit PHP in Berührung gekommen. Da ich selbst relativ wenig Erklärungen im Internet gefunden habe, stelle ich hier ein kleines Beispielscript, mit mcrypt vor. Ich setze bei diesem Beitrag ein bisschen Grundwissen in Kryptografie heraus.
Verschlüsselung und Entschlüsselung einer Zeichenfolge
mcrypt ist eine PHP-Erweiterung, die Methoden zur Datenschlüsselung mit Algorithmen wie zum Beispiel TirpleDES und Blowfish bietet. In dem Beispiel Script verschlüssel ich einen String mit meinem geheimen Schlüssel. Der geheime Schlüssel dient zur Ver- und Entschlüsselung und ist somit wie ein Passwort anzusehen.
// Anwendungsbeispiel Verschluessellung und anschliessende Entschuesselung
// der Schluessel und die geheime Zeichenkette
$key = "geheimer Schluessel";
$txt = "Wichtige Daten, die verschluesselt werden muessen.";
// Initialisierung der Verschluesselungsmethoden
$td = mcrypt_module_open("blowfish" , "" , "ecb" , "");
$key = substr($key , 0 , mcrypt_enc_get_key_size( $td ));
$iv = mcrypt_create_iv(mcrypt_enc_get_iv_size( $td ) , MCRYPT_RAND );
// Verschluessellung
mcrypt_generic_init( $td , $key , $iv );
$encrypted = mcrypt_generic( $td , $txt );
mcrypt_generic_deinit( $td );
echo $encrypted;
echo "\n";
// Entschluessellung
mcrypt_generic_init( $td , $key , $iv );
$decrypted = mdecrypt_generic( $td , $encrypted );
mcrypt_generic_deinit( $td );
echo $decrypted;
mcrypt_module_close( $td );
// Das war das komplette Script.
// Viel Spass beim Ausprobieren
?>
Erklärung der Funktion des php-Script
Mit mcrypt_module_open(“blowfish” , “” , “ecb” , “”); initialisieren wir die Mechanismen der mcrypt-Bibiliothek. Das erste Attribut bezeichnet das verwendete Modul, das dritte Attribut den gewünschten Verschlüsselungsbtrieb – in unserem Fall ECB. Das Zweite und das Dritte Attribut können leer gelassen werden und werden aus der php.ini gezogen.
Als nächstes muss der sogenannte Initialisierungsvektor erstellt werden. Dies geschieht mit mcrypt_create_iv(mcrypt_enc_get_iv_size( $td ) , MCRYPT_RAND );. Die Attribute bezeichnen die Vektorgröße und die Quelle der zufallsbasierten Daten. Die verwendete MCRYPT_RAND-Konstante emrpfielt sich hierbei, da diee sowohl unter Linux, wie auch unter Windows funktioniert.
Nach diesen Beiden Schritten ist die mycrypt-Bibiliothek bereit zu verschlüsseln.
Zuerst müssen wir ensprechend viel Speicherplatz reservieren. Dabei bedienen wir uns mcrypt_generic_init( $td , $key , $iv ); und übereichen somit die vorher erzeugten Modul- und Initialisierungshandels, sowie den Wert des Schlüssels. Der Schlüssel wird übrigens automatisch auf die Maximallänge des Algorithmus beschnitten.
Nun folgt ein Aufruf von $encrypted = mcrypt_generic( $td , $txt );, dessen Ausgabe die verschlüsselte Zeichenkette ist. Als letztes wird mit mcrypt_generic_deinit( $td ); der reservierte Speicher wieder freigegeben und durch mcrypt_module_close( $td ); die Arbeit von mycrypt beendet. Die Entschlüsselung der Zeichenkette erfolgt identisch, allerdings muss mcrypt_generic durch mdecrypt_generic ersetzt werden.
Weitere Informationen
Abschließend habe ich in der nachfolgenden Tabelle versucht weiterführende Informationen zum Thema Kryptografie in PHP zusammenzufassen. Das Beispielscript ist nur ein minimaler Einstieg, zeigt aber relativ schnell die Funktion einer Verschlüsselung in php.
| Konstantenname | Eingesetzter Algorithmus | Schlüsellänge | Blocklänge |
|---|---|---|---|
| MCRYPT_BLOWFISH | Blowfish | variabel, bis 448 | 64 |
| MCRYPT_3DES | Dreifaches DES-Verfahren | 168 | 64 |
| MCRYPT_DES | DES | 56 | 64 |
| Konstantenname | Beschreibung |
|---|---|
| MCRYPT_MODE_ECB | Electronic Code Book |
| MCRYPT_MODE_CFB | Cipher Feedback |
| MCRYPT_MODE_NOFB | Output Feedback mit der Zahl der Feedback-Bits, die der Größe des Algorithenblocks gleicht |
