Verschlüsselung mit PHP
Stand vom 26.06.2002
von Daniel Kressler
Wer mit PHP programmiert steht auch ab und zu vor dem Problem der Verschlüsselung. Dieser Beitrag stellt die Einwegverschlüsselung in PHP vor, und zeigt, wie man auf einfache Art z.B. Passwörter verschlüsselt.
Verschlüsselung ist ein Fester Bestandteil von PHP-Programmen und viele Programmierer haben sich diese Art der Datenverarbeitung in vielen Bereichen als Basis gesetzt. Bei der Speicherung von Passwörtern Beispielsweise, muss der Programmierer sehr auf die Sicherheit und Zuverlässigkeit seines Programms achten. Gerade die Sicherheit bei Passwörtern und anderen, ähnlich wichtigen, Resourcen ist eine höchst empfindliche Angelegenheit. In PHP hat man die Auswahl zwischen Einwegverschlüsselung (nur Verschlüsselung, keine Entschlüsselung) und Mehrwegverschlüsselung (Ver- und Entschlüsselung).
Einwegverschlüsselungsmethoden sind z.B. md5()
oder crypt(). Dabei basieren die Methoden aus einem
zufallsgesteuerten Rechenalgorithmus.
Mehrwegverschlüsselungsmethoden gibt es eigentlich nur eine
wirkungsvolle, base64_encode() bzw. base64_decode().
Mit base64_decode()/base64_encode() kann
man Texte oder Ähnliches, vor der Übertragung an andere
Personen (Rechner) usw. verschlüsseln und den Empfänger
die Entschlüsselung vornehmen lassen. Allerdings ist es NICHT
sehr schwer für einen einigermaßen fortgeschrittene Programmierer,
den verschlüsselten String zu knacken. Genau aus diesem Grunde,
ist eine Verschlüsselung von Passwörtern mit base64_encode()
bzw. base64_decode() nicht zu empfehlen. Deshalb
wird hier auch nicht weiter auf diese Methode eingegangen.
Bei der Verschlüsselung von Passwörtern spielt, wie schon
gesagt, die Sicherheit eine ganz, ganz große Rolle.
Passwörter verschlüsselt man am besten mit einer der Einwegverschlüsselungsmethoden.
Jetzt mögen Sie vielleicht denken
"Was ein Quatsch, wie soll ich das Passwort den wieder entschlüsseln?".
Das lässt sich kurz und knapp sagen, Sie müssen diese
Passwörter Ja, nicht wieder entschlüsseln können,
denn wenn Sie das (zu 99,99%) nicht können, dann kann es eben
so wenig ein anderer. Wobei ich nun wieder auf die Sicherheit hinweise
muss, denn eine Verschlüsselungsmethode mit 100 protzentiger
Sicherheit gibt es nicht und die wird es auch nicht geben.
Mit sehr viel Zeit kann ein sehr Fachkenntlicher User/Programmierer,
das Passwort Rückberechnen und so mit den Schlüssel der
Methode herausfinden.
Nun stellt sich die Frage, was mit dem Einwegverschlüsselten Passwort nun geschehen soll. Eigentlich ganz einfach und klar. Dieses wird in einer Textdatei oder in einer Datenbank gespeichert. Es ist die Grundlage für einen Passwortbereich.
Nun haben Sie ein Eingabe-Formular, mit einem INPUT-Field vom TYPE Passwort oder Text und einen Submit-Button.
Nachdem in dem INPUT-Field ein, möglicherweise korrektes, Passwort eingegeben wurde und die Übertragung zum Server mit einem Klick auf den Submit-Button bestätigt wurde, müssen Sie nach dem Erhalt der Passwortdaten diese Passwort, mit der selben Verschlüsselungsmethode verschlüsseln, mit der Sie auch das gespeicherte Passwort verschlüsselt haben.
Nun nachdem Sie jetzt zwei verschlüsselte Strings haben, können
Sie diese auf Korrektheit prüfen. (das entsprechende Einwegverschlüsselte
Passwort muss natürlioch zuvor aus der Textdatei oder der Datenbank
geladen werden)
Nun können die zwei verschlüsselten Strings auf Korrektheit
überprüft werden.
Eine mögliche Methode wäre diese:
if($gespeichertes_Passwort == $eingegebenes_Passwort){
echo 'Passwort ist Richtig.';
}else{
echo 'Passwort ist Falsch.';
}
Dies ist in keiner Weise die sicherste Variante, es soll nur die Vorgehensweise dargestellt werden.
So, zum Schluss dieses Artikels noch mal eine kleinen Zusammenfassung, des Verschlüsseln-Prüfen-Vorgangs.
Passworteingabe durch den User (durch das Formular)
$eingabe = '123456';
Eingabe verschlüsseln z.B. mit md5()...
$pw_verschlüsselt = md5($eingabe);
Das verschlüsselte Passwort sieht jetzt so aus: e10adc3949ba59abbe56e057f20f883e
Das verschlüsselt gespeicherte Passwort, aus der Datenbank
oder Textdatei.
$gespeichertes_pw = 'e10adc3949ba59abbe56e057f20f883e';
Passwortüberprüfung...
if($gespeichertes_pw == $pw_verschlüsselt){
echo 'Passwort ist Richtig.';
}else{
echo 'Passwort ist Falsch.';
}
Im vorliegenden Fall würde die Ausgabe "Passwort ist
Richtig." heißen.
Jetzt können Sie dem User eintritt in den Passwortgeschütztenbereich
gewähren.
Was bringt jetzt eigentlich die Verschlüsselung?
Das verschlüsselte Passwort kann jetzt über die Parameter
von Seite zu Seite weitergegeben werden. Nicht wie es manche Programmierer
machen, dass das Passwort in der Adresszeile immer Sichtbar ist.
Es gibt noch viele andere möglichkeiten Passwörter zu
verschlüsseln bzw. zu entschlüsseln, allerdings sind diese
weit aus Umfangreicher und sicher nicht als Lernbeispiel zu gebrauchen.
(dk)

HTML