Hallo im Versuch, eine Webanwendung mit Benutzeranmeldung zu machen. Ich möchte das Passwort verschlüsseln, indem ich eine verschlüsselte/unidirektionale Verschlüsselung anwende. Wenn ich versuche, einen Hash-Passwort ein Null-Wert machen wird in der Datenbank anstelle des Hash-Passwort in der Passwort-Spalte gespeichertversuchen, ein Hash-Verschlüsselungspasswort zu machen, aber nur Nullwert wird gespeichert
Hier ist die Verschlüsselung Klasse
public class encryption {
public static String MD5(String Password) {
try {
java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");
byte[] array = md.digest(Password.getBytes());
StringBuffer sb = new StringBuffer();
for (int i = 0; i < array.length; ++i) {
sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1,3));
}
return sb.toString();
} catch (java.security.NoSuchAlgorithmException e) {
}
return Password;
}
}
ist hier der Benutzer sign-up-Servlet
package com.servlet;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import Model.User;
import Data.UserDB;
import Data.encryption;
public class UserList extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
String url = "/userSignUp.jsp";
// get current action
String action = request.getParameter("action");
if (action == null) {
action = "join"; // default action
}
// perform action and set URL to appropriate page
if (action.equals("join")) {
url = "/userSignUp.jsp"; // the "join" page
}
else if (action.equals("add")) {
// get parameters from the request
String firstName = request.getParameter("firstName");
String lastName = request.getParameter("lastName");
String Email = request.getParameter("Email");
String userName = request.getParameter("Username");
String Password = request.getParameter(encryption.MD5("Password"));
// store data in User object
User user = new User();
user.setEmail(Email);
user.setFirstName(firstName);
user.setLastName(lastName);
user.setUsername(userName);
user.setPassword(Password);
// validate the parameters
String message;
if (UserDB.emailExists(user.getEmail())) {
message = "This email address already exists.<br>" +
"Please enter another email address.";
url = "/index.jsp";
}
else {
message = "";
url = "/homepage.jsp";
UserDB.insert(user);
String Username = userName;
HttpSession session = request.getSession();
session.setAttribute("Username", Username);
}
request.setAttribute("user", user);
request.setAttribute("message", message);
}
getServletContext()
.getRequestDispatcher(url)
.forward(request, response);
}
}
Sie sollten nicht mit md5 annymore für Passwort-Hashing verschlüsseln .. Besser ist sha256 verwenden oder nach oben oder bcrypt –
verwenden, wenn ein Passwort Speichern Verifier nur mit einer Hash-Funktion ist nicht ausreichend und nur ein Salz hinzufügen tut wenig, um die Sicherheit zu verbessern. Stattdessen iterieren Sie über eine HMAC mit einer zufälligen Salz für etwa 100ms Dauer und speichern Sie das Salz mit dem Hash. Besser noch verwenden Sie eine Funktion wie 'PBKDF2',' Rfc2898DeriveBytes', 'Argon2',' password_hash', 'BCrypt' oder ähnliche Funktionen. Der Punkt ist, dass der Angreifer viel Zeit damit verbringen muss, Passwörter mit roher Gewalt zu finden. – zaph
@RaymondNijland SHA256 ist im Wesentlichen ** nicht besser ** als MD5 für einen Passwort-Verifizierer. – zaph