Crypt und Login

dwex

Erfahrenes Mitglied
Hallo Leute,

stehe vor einem Problem das ich nicht vermag selbst zu lösen.

Also ich habe eine Datenbank in der stehen Benutzername und Passwort.
Es gab/gibt ein Script welches aus einem TXT-File diese Daten ausgelesen und dann in die MySQL-Datenbank geschrieben hat.
Im Script wurde die Funktion crypt() (ohne Salt) für das Passwort verwendet.

Der ganze Login ist jetzt zwei Jahre über mysql_auth (Apache-Modul) gelaufen und hat funktioniert.
Jetzt steht mysql_auth für Apache2 nicht mehr zur Verfügung und ich soll das ganze auf einen PHP-Login umschreiben.

Leider kann ich den von mir aus dem eingegebenen Passwort erstellten Crypt-Schlüssel nicht mit dem in der DB gespeicherten Schlüssel vergleichen da mir Crypt immer wieder einen anderen Schlüssel für das eingegebene Passwort generiert.

Hat jemand eine Idee was man machen könnte damit das funktioniert.

Vielen Dank im Voraus!
 
Hallo,

Du kannst statt crypt() auch md5() verwenden. Das gibt immer den gleichen Schlüssel für das gleiche Passwort aus.
Hoffe, das hilft dir weiter.
 
Ne simste - das hilft nicht weiter.

Mein Problem ist das die Passwörter bereits mit crypt "verschlüsselt" wurden - ich also keine Passwörter im "Realformat" habe. Auch kann ich die Ursprungspasswörter nicht einfach wieder in die DB schreiben da ich ja sonst sämtliche Passwortänderungen der User überschreiben würde.

Ich muss also irgendwie mit den Schlüsseln aus der Datenbank klar kommen.

Ich habe jetzt aber nach einigem Überlegen eine Lösung für mein Problem gefunden und zwar folgendes.

Man nehme an, dass das Passwort 123456 und z.B. über crypt der "Schlüssel" $1$dGPiKp7/$m7plo/VJpIJA5yCfkChCh0 rausgekommen ist.

Jetzt lese ich das gecryptete Passwort aus der DB aus welches zum User gehört. Dann nehme ich die ersten 12 Zeichen (den Salt) raus und prüfe mit crypt("123456", "$1$dGPiKp7/$") ob es den gleichen String ausgibt wie in der DB steht.

Also (ungetestet):
PHP:
$passwort_salt = substr($passwort_aus_DB,0,12)
if(crypt($passwort_aus_benutzereingabe, $passwort_salt) === $passwort_aus_DB) {
     echo "Passwort richtig";
} else {
     echo "Passwort falsch";
}

Und schon funktioniert es!
 
Zuletzt bearbeitet:
Zurück