Was bringt md5() dann? Und was nimmt man zum verschlüsseln für Passwörter?
Verschlüsseln
Einklappen
X
-
Zur Passwort-Verschlüsselung ist crypt vorgesehen.
encrypt ist - wie MD5 - nicht umkehrbar (bzw. schwer zu entschlüsseln), daher muss auch hier das Passwort verschlüsselt gespeichert werden.
Beachte, dass crypt zwei Parameter verarbeitet: Der erste ist die Eingabe, der andere der Schlüssel (salt).
Bei der Passwortabfrage wird dann die Eingabe mit dem alten Schlüssel kodiert und das Ergebnis mit dem gespeicherten Wert verglichen.
MD5 ist zwar im Prinzip das gleiche, benutzt aber ein konstantes Salt, so dass zwei gleiche Passwörter auch verschlüsselt identisch sind. Und das erleichtert es Crackern alle Passwörter eines Systems zu knacken, solange sie verschlüsselt vorliegen.
Nach der Theorie nun zur praktischen Anwendung:
- Es gibt mehrere Crypt-Verfahren mit unterschiedlichen Salt-Längen, die aber nicht alle von jedem Betriebssystem unterstützt werden.
- Der Rückgabewert beginnt immer mit dem gegebenen Salt.
- Ist kein Salt gegeben, wird von PHP eins erzeugt. Die Länge des Salts steht in der Konstanten CRYPT_SALT_LENGTH.
zum Bleistift:
Passwort setzen
Eingabe -> $password
$pass_crypt = crypt($password); # ohne Salt
speichern in DB
Passwort abfragen
Eingabe -> $password
aus DB holen: $pass_crypt
$salt = substr($pass_crypt, 0, CRYPT_SALT_LENGTH); # Salt ermitteln
$crypt = crypt($password, $salt);
if (strcmp($crypt, $pass_crypt) die ('falsches Passwort');
else echo 'ok';
Kommentar
-
ach ja: Was bringt MD5?
- Hilft bei der Optimierung der Datenablage bei stark begrenztem Speicher
- gut für Prüfsummen (s. auch Beispiele in den Kommentaren im Online-Handbuch)
- einfache Variante der Verschlüsselung, aber nicht so sicher wie crypt (siehe oben)
Kommentar
Kommentar