wie die Speicherung der Passwörter in der Datenbank?
Ich nutze jsp und servlets in meiner web-Anwendung. ich brauche für die Speicherung der Passwörter in der Datenbank. Ich fand, dass das hashing wird der beste Weg, das zu tun.
Ich benutzte diesen code um es zu tun.
<%@page import="com.jSurvey.entity.*" %>
<%@page import="java.security.MessageDigest" %>
<%@page import="java.security.NoSuchAlgorithmException" %>
<%@page import="java.math.BigInteger" %>
<%@page import="com.jSurvey.controller.*" %>
<%@page import="sun.misc.BASE64Encoder" %>
<%try {
String user = request.getParameter("Username");
String pass = request.getParameter("Password1");
String name = request.getParameter("Name");
String mail = request.getParameter("email");
String phone = request.getParameter("phone");
String add1 = request.getParameter("address1");
String add2 = request.getParameter("address2");
String country = request.getParameter("country");
Login login = new Login();
Account account = new Account();
login.setId(user);
login.setPassword(pass);
if (!(add1.equals(""))) {
account.setAddress1(add1);
}
if (!(add2.equals(""))) {
account.setAddress2(add2);
}
if (!(country.equals(""))) {
account.setCountry(country);
}
account.setId(user);
account.setMail_id(mail);
if (!(phone.equals(""))) {
account.setPhone_no(Long.parseLong(phone));
}
account.setName(name);
java.security.MessageDigest d = null;
d = java.security.MessageDigest.getInstance("SHA-1");
d.reset();
d.update(pass.getBytes("UTF-8"));
byte b[] = d.digest();
String tmp = (new BASE64Encoder()).encode(b);
account.setPassword(tmp);
account.setPrivilege(1);
LoginJpaController logcon = new LoginJpaController();
AccountJpaController acccon = new AccountJpaController();
logcon.create(login);
acccon.create(account);
session.setAttribute("user", user);
response.sendRedirect("dashboard.jsp");
} catch (NumberFormatException ex) {
out.println("Invalid data");
}
%>
Als ich versuchte, drucken Sie den Wert von tmp, bekomme ich einen anderen Wert.ich denke, es ist der hash-Wert des Passworts. Aber wenn ich anhalten, diese Daten an die Datenbank der original-Passwort wird dort gespeichert anderen als der Wert in tmp..
Ich bin mit java-derby als Datenbank.
Was ist das problem???
- Zeigen Sie uns einige Ihrer db-code. Auch Sie sollten einen Salz.
- Obligatorisch Coding Horror-Artikel: codinghorror.com/blog/2007/09/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
tmp
in IhremINSERT
Abfrage, sondern als das original Passwort.BASE64Encoder
. Es ist Teil des Sun-internen Bibliotheken und ist FREIBLEIBEND. Verwenden commons-codecBase64
Apache hat ein commons-Bibliothek, nämlich Commons-Codec, das macht es leichter zu Kodieren des Passworts. Es wird die ganze Arbeit für Sie.
Oder wenn Sie wollen, base64:
Versuchen dieses sollte es funktionieren.
}