2017-12-26 6 views
-1

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); 
    }  
} 
+1

Sie sollten nicht mit md5 annymore für Passwort-Hashing verschlüsseln .. Besser ist sha256 verwenden oder nach oben oder bcrypt –

+0

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

+0

@RaymondNijland SHA256 ist im Wesentlichen ** nicht besser ** als MD5 für einen Passwort-Verifizierer. – zaph

Antwort

1

String Password = request.getParameter(encryption.MD5("Password"));

hier verschlüsseln Sie die Name Anforderung Parameter und solange es wird geändert Wert kann nicht mehr von Request Params gelöst werden. Sie sollten den Wert (Ergebnis von getParameter Anruf)

String Password = encryption.MD5(request.getParameter("Password"));

+0

okay thaanks funktioniert es Nikolay – MoX2

+2

** Tun Sie das nicht **, es ist völlig nicht sicher. Solche unsicheren Methoden setzen die Benutzer in Gefahr. Siehe Kommentar zu Frage für Details. Auch Hashing ist keine Verschlüsselung. – zaph

Verwandte Themen