Verschlüsselung mit md5, sha1 & Crypt

Es kann oftmals nützlich sein zu wissen, mit welchen Methoden du einen Hash (oder auch Prüfsumme) generieren kannst. Dies ist zum Beispiel mit unserem md5 & sha1 Generator problemlos möglich.

In diesem Artikel wirst du etwas mehr über die verschiedenen Möglichkeiten erfahren. Außerdem zeige ich dir, wie diese in PHP implementiert wurden.

Zunächst einmal ist es wichtig zu klären, was mit einem Hash auf sich hat. Du kannst dir darunter eine Verschlüsselung vorstellen, für die es kein Schlüssel gibt. Mit einem speziellen Algorithmus wird ein Text, dieser kann auch etwas länger sein, in eine Buchstaben- und Zahlenfolge konvertiert, man spricht dann von einem Hash.

Dieser Hash ist immer gleich, solange ihm der gleiche Inhalt zu Grunde liegt. Du kannst also zum Beispiel zwei Worte darauf überprüfen, ob sie identisch sind, ohne, dass du den Inhalt kennst, denn dafür nimmst die Prüfsumme.

Im folgenden Text wird dieses Prinzip noch näher erläutert.

Einsatzgebiete von diesen Verschlüsselungen

Egal ob du zwecks Datenschutz IP-Adressen nicht so speichern darfst, dass sie nachvollzogen werden können, oder ob du verschiedene Informationen für andere nicht zugänglich machen möchtest. Verschlüsselung macht es möglich.

Speicherst du den etwa den md5-Hash einer IP-Adresse in deiner Datenbank kannst du später überprüfen, ob der Besucher bereits auf deiner Internetseite war. Du kannst die Besucher, deren IP-Hashes in der Datenbank gespeichert sind, also so nicht mehr zurückverfolgen, aber du kannst diesen Hash mit einem anderen vergleichen und so herausfinden, ob es sich um die gleichen IP-Adressen (Datenbank und neuer Besucher) handelt.

Eine solche Methode ist natürlich auch interessant für Passwörter. Ein ganz einfach Beispiel für Verschlüsselung: Auf deiner Internetseite ist ein Passwortschutz eingebaut. Mit dem Absenden des Formulars wird das Passwort zum Beispiel mit sha1 verschlüsselt. Der Server nutzt ebenfalls sha1, das ist die Voraussetzung. In seiner Datenbank befindet sich das Passwort als sha1-Hash. Wenn er nun den sha1-Hash empfängt, kann er prüfen, ob das Passwort richtig ist oder nicht. Sollte jemand diesen Datenverkehr abfangen, so sieht er zwar den Passwort-Hash, aber nicht das Kennwort im Klartext.

Dieses Beispiel eignet sich nur begrenzt, um die Funktionsweise zu erläutern, da der Angreifer nur den abgefangen Hash senden bräuchte (nur diesen verlangt ja der Server), um das Passwort zu knacken. Doch ich hoffe, dir wurde dadurch klar, welche Möglichkeiten md5, sha1 und Co. bieten.

Zusammengefasst in einem Satz: Du kannst mit solchen Algorithmen prüfen, ob Inhalte identisch sind, ohne den eigentlichen Inhalt zu kennen.

Übrigens, auch Virenscanner greifen zum Teil auf Prüfsummen zurück. Bekannte Viren können anhand dieser identifiziert werden. Die Prüfsummen sind äußerst klein, während die eigentlichen Dateien um einiges größer sind. So kann ein Update der Viren-Definitionen deutlich schneller vonstatten gehen.

Kann man verschlüsselte Strings entschlüsseln?

Jein. Theoretisch gibt es keine Funktion um einen verschlüsselten String einfach wieder so zu entschlüsseln. Denn es gibt keinen Schlüssel dafür.

Cracker können sich die Funktionsweise jedoch zu Nutze machen und eine Datenbank aufbauen. Dazu werden möglichst viele Zeichenfolgen verschlüsselt. Wurde einmal „test“ verschlüsselt und der Hash in der Datenbank gespeichert, so kann die Prüfsumme später mit Hilfe der Datenbank aufgelöst werden.

Eine Datenbank, die alle Möglichkeiten umfasst, wäre allerdings riesig, sodass sie bis dato nicht zur (freien) Verfügung steht. Hier kann es helfen mehrfach zu verschlüsseln. Also nochmals die Prüfsumme von der Prüfsumme zu erzeugen. Dann steigt die Wahrscheinlichkeit, dass eine Prüfsumme in der Reihe (alle müssen nacheinander aufgelöst werden) nicht in der Datenbank vorhanden ist.

Verschlüsselung mit md5

md5() ist eine sehr beliebte Methode.

Die Prüfsumme hat eine Länge von 32 Zeichen und besteht aus Kleinbuchstaben, Großbuchstaben und Zahlen.

Jedoch soll es bei diesem Algorithmus vergleichsweise häufig vorkommen, dass zwei völlig unterschiedliche Texte, die gleiche Prüfsumme ergeben. In so einem Fall ist der Algorithmus nicht hilfreich, wenn nicht gar gefährlich.

Verschlüsselung mit sha1

Auch sha1() erfreut sich großer Beliebtheit bei den Webmastern.

Ein sha1-Hash ist 8 Zeichen länger. Er besteht aus den gleichen Zeichen, die auch bei md5 verwendet werden.

Verschlüsselung mit Crypt

crypt() ist ebenfalls in PHP implentiert. Allerdings finde ich diese Funktion besonders interessant, da es für ein String mehrere tausend Möglichkeiten gibt. Zudem werden Sonderzeichen verwendet. Crypt wird bei .htaccess Logins verwendet.

 Code Beispiele

Abschließend noch einige Code Beispiele, die dir zeigen, wie du diese drei Algorithmen in PHP einsetzen kannst.

< ?php
// Ausgabe: "098f6bcd4621d373cade4e832627b4f6"
echo md5('test');

// Zweifache Verschlüsselung mit sha1, Ausgabe: "c4033bff94b567a190e33faa551f411caef444f2"
echo sha1(sha1('test'));

// Crypt, mehrere mögliche Ausgaben
echo crypt('test');
?>

Ein Gedanke zu „Verschlüsselung mit md5, sha1 & Crypt“