Es hängt davon ab, gegen was Sie sich verteidigen. Wenn ein Angreifer Ihre Datenbank herunterzieht (oder Ihre Anwendung dazu bringt, die Datenbank anzuzeigen), sind Klartextpasswörter nutzlos. Es gibt viele Angriffe, die darauf angewiesen sind, die Anwendung davon zu überzeugen, ihre privaten Daten auszusprechen - SQL-Injection, Session-Hijack, usw. Es ist oft besser, die Daten nicht zu behalten, sondern die Hash-Version so schlecht zu halten, dass sie nicht einfach verwendet werden kann .
Wie Ihr Kollege vorschlägt, kann dies trivialerweise dadurch verhindert werden, dass der gleiche Hash-Algorithmus für ein Wörterbuch ausgeführt wird und mithilfe von Rainbow-Tabellen die Informationen abgerufen werden. Die übliche Lösung ist ein Geheimnis Salz plus zusätzliche Benutzerinformationen verwenden, um die Hash-Ergebnisse unique- so etwas wie zu machen:
String hashedPass=CryptUtils.MD5("alsdl;ksahglhkjfsdkjhkjhkfsdlsdf" + user.getCreateDate().toString() + user.getPassword);
Solange Ihr Salz ist geheim, oder der Angreifer kennt nicht das genaue Erstellungsdatum Nach der Aufzeichnung des Benutzers wird ein Wörterbuchangriff fehlschlagen, auch wenn sie das Passwortfeld löschen können.
guten Fang dort - es ist wirklich eine emotionale Reaktion von der OP-Mitarbeiter. Das Ansprechen der warmen Fuzzys wird wahrscheinlich produktiver sein als die harte Logik und die Metriken. Vielleicht die hashing algo Wahl auf den Kollegen schieben, damit sie mehr zur richtigen Lösung kaufen? –
Sie haben hier einen sehr guten Punkt. Ich habe in der Frage nicht erwähnt, aber das war sein Code - er hat es auf diese Weise implimenemented. Es ist jetzt mein Code, also könnte ich es unilaterly ändern, aber ich würde es ihm lieber erlauben, Gesicht zu speichern/zustimmen, falls ich weitere Hilfe brauche, um den Code zu verstehen ... –