Verschlüsselung mit PHPWer 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)

Bookmark setzen... These icons link to social bookmarking sites where readers can share and discover new web pages.
  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Bloglines
  • MisterWong
  • MySpace
  • Reddit
  • SEOigg
  • Technorati
  • TwitThis
  • Y!GG
  • Google Bookmarks

Keine weiterführenden Beiträge.