Verschlüsselung mit PHP

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)

This entry was posted in PHP. Bookmark the permalink.

3 Responses to Verschlüsselung mit PHP

  1. Ruby says:

    Gutes Tutorial!
    Sehr hilfreich!
    MfG
    Ruby

  2. Ruby2 says:

    Sehr gutes Tutorial, hast du gut gemacht.

    MfG
    Ruby²

  3. Peter H. says:

    Sehr hilfreich, vielen, vielen Dank!

Leave a Reply

Your email address will not be published. Required fields are marked *