ich möchte eine kleine Java-Applikation schreiben, die einen Benutzernamen und ein Passwort erfordert. Beides soll in einer Datenbank gespeichert werden. Der Benutzername kann von mir aus da ruhig im Klartext drinstehen, aber das Passwort sollte irgendwie verschlüsselt werden.
Leider kenne ich mich damit so gut wie gar nicht aus. Kennt jemand einen Artikel, der sich mit der Verschlüsselung von Text/Strings in Java beschäftigt?
Wenn ich das verschlüsselte Passwort in der Datenbank speichere, dann muss ich doch auch den dazugehörenden Schlüssel mitspeichern sonst kann man das Passwort doch nie wieder mit dem beim Login eingegebenen vergleichen, oder?
java.awt.TextField hat eine Methode setEchoChar(char), dannn sieht der Benutzer nur noch das Zeichen, was angesetzt ist. In der DB wird die Zeichenkette in klaren Texte gespeichert. Mit einem BenutzerID in der DB kann man sie wieder ausfinden und vergleichen.
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Den Stern solltest du gleich wieder entziehen. Die genannte Möglichkeit bietet null Sicherheit. Es handelt sich nicht um Verschlüsselung sondern um Codierung. Die base64 Codierung lässt sich wie selbst drauf hingewiesen leicht wieder rückgängig machen => es macht keinen wesentlichen Unterschied ob du die Daten im Klartext oder in base64 abspeicherst, ausser dass sie ned sofort lesbar sind, kann sie jeder entschlüsseln und zwar mit Aufwand null.
„Sichere“ Methoden gibt es, indem du das Passwort durch eine Funktion jagst, die daraus eine Zeichenkette generiert (hashwert oder sowas). Dies macht z.b. MD5 (suche bei google nach MD5 und java findet sicher irgendwas, weiss ned ob das im JDK enthalten ist). Diese Zeichenkette ist NICHT entschlüsselbar. Checken ob das Passwort richtig ist, kannst du indem du das eingegebene Passwort ebenfalls durch MD5 jagst und dann mit dem gespeicherten Wert vergleichst.
Wichtig: Du wirst nie mehr (ohne erheblichen Rechneraufwand) an das Originalpasswort rankommen. Aber das ist auch gut so, weil sonst wäre es nicht sicher.
Wenn es sich um eine MySQL Datenbank handelt kannst Du das Passwort mit hilfe der Funktion PASSWORD() reinschreiben und verschlüsseln. Für genaue Syntax einfach mal google suchen lassen.
Die gängige Lösung für dein Problem ist das Password mit einem irreversiblen aber eindeutigen Algorithmus zu verschlüsseln (einen Hash bilden) und es dann in der Datenbank zu speichern.
Wenn ein User dann ein Passwort eingibt, wird nicht das gespeicherte Passwort entschlüsselt (was ja nicht möglich ist, da der Algorithmus nur in eine Richtung funktioniert) sondern das eingegebene Passwort verschlüsselt, also wiederum ein Hash davon gebildet, und dann werden die beiden Hash verglichen.