markus_walther: Passwort mit MD5() verschlüsseln und entschlüsseln?

Hallo!

Ich habe einen Login programmiert, und möchte die Daten in einer Datenbank speichern. Natürlich sollen die Passwörter möglichst "sicher" sein, deshalb werden sie mit md5 verschlüsselt. Dies funktioniert auch super, doch will man sich einloggen, kommt man nicht rein. Ich denke es liegt an der Verschlüsselung. Mein Code funktioniert folgende Maßen:

1. Passwort wird eingegeben
2. Passwort wird mit MD5() verschlüsselt
3. Passwort wird in DB geschrieben

4. Login: Daten werden eingegeben
5. Login: Login nicht möglich.

Wenn ich in die Datenbank schaue, und die mit MD5 verschlüsselten Passwwörter in "normale" Wörter ändere, kann ich mich ganz normal einloggen. Also müssten wahrscheinlich die Passwörter vor dem Auslesen aus der Datenbank noch einmal entschlüsselt werden? Oder habe ich einen anderen Fehler gemacht?
Ich hoffe ihr könnt mir helfen.

mfg
markus

  1. Holladiewaldfee,

    MD5 ist ein Hash, den kannst Du nicht entschlüsseln. Du kannst nur das eingegebene Passwort ebenfalls mit MD5 hashen und dann mit dem in der Datenbank gespeicherten vergleichen.

    Übrigens gilt MD5 nicht mehr wirklich als sicher. Nimm SHA-256 oder ähnliches, wenn Du eine hohe Sicherheit benötigst.

    Ciao,

    Harry

    --
      Irgendwann kommt die Waldfee - oder auch nicht ... (Projektphase: Keine Ahnung)
      Bis dahin:
      Ski- und Bergtouren in den Tölzer Voralpen und im Karwendel
    1. Hi Harry.

      Danke für die schnelle Hilfe.
      Funktioniert jetzt. :)

      markus

    2. Übrigens gilt MD5 nicht mehr wirklich als sicher.

      Ja - so wie auch RSA-768 "nicht mehr wirklich sicher" ist. Für diesen Einsatzzweck ist das aber noch immer ohne belang. Solange kein Preimage-Angriff auf "kurze" Zeichenketten möglich ist, ist man prinzipiell noch sicher.

      Nimm SHA-256 oder ähnliches, wenn Du eine hohe Sicherheit benötigst.

      Afaik sind für die SHA-2-Familie mittlerweile Preimage-Angriffsmethoden bekannt, aber auch diese sind nicht relevant.

      Zudem sind sämtliche SHA-2-Hashes potentiell mit denselben Methoden angreifbar wie jene aus der SHA-1-Familie.

      Die Empfehlung auf stärkere Hash-Algorithmen umzusteigen wird vom NIST zwar herrausgegeben, bezieht sich aber auf die Verwendung in digitalen Signaturen. Leider wird das oft falsch interpretiert. Nach den aktuellen empfehlungen wird sogar angestrebt, die SHA-2-Familie einzustampen und auf die SHA-3-Familie umzusteigen. Da läuft aber seit Oktober 2008 der Validierungsprozess.

      In Bezug auf Sicherheit für "noramle" gehashte Klartextpasswörter ist MD5 nicht unsicherer als SHA-256. Die bekannten Lücken in MD5 sind für diesen Punkt nicht relevant - das was SHA-256 sicherer macht ist die Länge des Hashes, der größere Umfang ist aber für nicht gesalzene "kurze" Passwörter nicht relevant. Der Hash-Algorithmus spielt bei den gebräuchlichen angriffen idR. keine Rolle da sämtliche sinnvollen Angriffe auf Brute-Force basieren - ob ich "alle" 8-stelligen Passwörter mit dem Zeichenvorrat A-Za-z0-9 oder ein definiertes Wörterbuch in MD5 oder SHA-512 abilde ist egal, die Menge der Datensätze ist endlich. Der Raum der möglichen Hashes ist z.B. bei MD5 um etwa den Faktor 1*10^23 größer.

      Es schadet nicht, auf SHA-256 umzusatteln - für den Schutz der "Breiten Masse" bringt es aber nichts, wenn man vergisst seine Passwörter zu salzen.

  2. Hi!

    Natürlich sollen die Passwörter möglichst "sicher" sein, deshalb werden sie mit md5 verschlüsselt.

    MD5 ist keine Verschlüsselung sondern eine Hashwert-Berechnung. Idealerweise ist diese Berechnung nicht umkehrbar.

    Wenn ich in die Datenbank schaue, und die mit MD5 verschlüsselten Passwwörter in "normale" Wörter ändere, kann ich mich ganz normal einloggen.

    Im DBMS stehen keine "verschlüsselten Passwörter" sondern da steht eine Zeichenfolge. Die hat irgendwer vor einiger Zeit mal errechnen lassen, aber das ist zum Zeitpunkt des Logins uninteressant.

    Also müssten wahrscheinlich die Passwörter vor dem Auslesen aus der Datenbank noch einmal entschlüsselt werden? Oder habe ich einen anderen Fehler gemacht?

    Wenn du die im DBMS stehende Zeichenfolge mit einer anderen Zeichenfolge vergleichen willst, dann musst du das genauso tun.

    Wenn die ürsprüngliche Zeichenfolge mit einem Algorithmus geändert worden ist (MD5), dann musst du eine neue Zeichenfolge, die du damit vergleichen willst, ebenfalls mit dem gleichen Algorithmus ändern und dann den Vergleich zwischen den beiden geänderten Werten vornehmen, also die jeweiligen MD5-Werte miteinander vergleichen.

    Lo!