Ich habe folgenden Code, fügen Sie die userName
und password
in die Datenbank ein
aber das Passwort wird im Nur-Text-Format gespeichert. Ich meine, wenn ich in die db schaue, kann ich das eingefügte Passwort sehen.
Ich möchte password
in encrypted
format
Wie kann ich das erreichen?
Laut der Konversation in den Kommentaren meinen Sie hashing Passwörter, nicht verschlüsselnde Passwörter. Normalerweise würden Sie dies mit einem Salz tun, um einen Regenbogen-Tischangriff zu verhindern. Das Speichern von Kennwörtern als gesalzene Hashes ist der Best Practice-Standard, wenn es darum geht, Kennwörter in Datenbanken zu speichern.
Ab Version 3.2 hat MongoDB keine native Unterstützung für das Hashing von Kennwörtern, wie es einige SQL-Datenbanken bieten, daher müssen Sie es in Java implementieren.
Um ein neues Konto zu erstellen oder das Passwort eines bestehenden Kontos zu ändern:
java.security.SecureRandom
einen kryptographisch sicheren zufälligen Salt-Wert . Diese Klasse funktioniert genau wie der Standard-Zufallsgenerator java.util.Random
( Es handelt sich um eine Unterklasse, aber es handelt sich um eine Trades-Performance mit einem viel höheren Grad an Nicht-Vorhersagbarkeit, die für einen sicherheitsrelevanten Kontext erforderlich ist. javax.crypto.SecretKeyFactory
username
, password_hash
und password_salt
(natürlich auch Ihre eigentlichen Anwendungsdaten). Speichern Sie das ursprüngliche Passwort nicht. So rufen Sie ein Konto ab:
username_input
und password_input
, die der vermeintliche Benutzer in dein Login-Formular eingegeben hat. username
mit dem vom Benutzer bereitgestellten username_input
übereinstimmt. password_salt
aus diesem Dokument password_salt
und password_input
genau wie zuvor verketten. password_hash
des Dokuments. Wenn es übereinstimmt, hat der Benutzer das richtige Passwort eingegeben. Sie könnten alternativ auch nur die Felder password_hash und password_salt des Dokuments abrufen und nicht den Rest laden, bevor der Benutzer authentifiziert wird, aber ich würde annehmen, dass es in der realen Welt mehr Last verursacht, als es speichern würde. Erfolgreiche Logins sind in der Regel weitaus häufiger als die nicht erfolgreichen Logins, es sei denn, Sie haben einen Angreifer, der versucht, einen Account zu erzwingen. Und in diesem Fall würden Sie den Angreifer mit fail2ban oder einem anderen Mechanismus zur Beschränkung der Anmeldung blockieren.
Tags und Links java mongodb encryption mongodb-query