Ich benutze MD5-Algorithmus, um Passwörter mit Salz zu hacken. Nachdem ich einen Benutzer registriert habe, speichere ich sowohl Hash-Passwort als auch Salz in meiner SQL-Datenbank. Leider, wenn ich sie später abrufe, um sie mit den Eingaben des Benutzers zu vergleichen, adressiere ich ein Problem mit der Codierung von Salz. Ich speichere Salz als VARCHAR (16) und wenn ich versuche, es von meiner Datenbank abzurufen, konvertiert es in einer anderen Form. Dies ist mein Code:In welcher Form zu speichern Salz und wie man es später für das Passwort abrufen validieren
ResultSet rs = stmt.executeQuery("SELECT * FROM users");
String DB_salt1 = rs.getString("Salt");
byte [] DB_salt = DB_salt1.getBytes();
habe ich einige System.out.println();
Funktionen, um das Problem zu lokalisieren und ich fand heraus, dass byte [] DB_salt = DB_salt1.getBytes();
gibt das falsche Salz, während String DB_salt1 = rs.getString("Salt");
die richtige eine ausgibt. Meine Vermutung ist, dass es Byte-Verlust passiert.
EDIT: Um zu klären, um die richtige Salz und das in meiner Datenbank gespeichert, sagen wir, ist [B @ 4e25154. String DB_salt1 = rs.getString("Salt");
speichert dieses Salz; der Richtige. Aber wenn byte [] DB_salt = DB_salt1.getBytes();
ausgeführt wird, gibt es eine verschiedene Salz, die den gesamten Prozess ruiniert.
Mögliche Duplikate von [Wo speichern Sie Ihre Salzstränge?] (Http://stackoverflow.com/questions/1219899/where-do-you-store-your-salt-strings) – Raedwald
Verwenden Sie nicht MD5 für Passwörter, dafür ist es nicht gedacht. Andere Algorithmen, wie zum Beispiel bcrypt, sind viel besser und behandeln tatsächlich das Speichern des Salzes für Sie. – stuXnet
Wenn Sie .getBytes() ausführen, erhalten Sie Bytes, wenn Sie getString() ausführen, erhalten Sie einen String. Beide haben ein anderes Aussehen, weil sie verschiedene Datentypen sind @stuXnet ist nicht MD5 der Standard und am häufigsten verwendete Methode, Passwörter zu hash? – KJaeg