2015-03-02 90 views
0

目前我正尝试从MD5中加密的数据库中获取密码。 E.G:我怎样才能加密MD5变量?

INSERT INTO Customer VALUES (1001, "Smith", "J.", "Alan", 'Mr', "43 The Glebe", "Mugwell Hill", "Nodnol", "", "N10 4SB", MD5("Alan"), "Mugwell Hill"); 

这种情况下的密码是Alan。 我想比较用户输入的密码。

String userid = request.getParameter("uname");  
    String pwd = request.getParameter("pass"); 

Class.forName("com.mysql.jdbc.Driver"); 
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/Erehwon","root", ""); 
Statement st = con.createStatement(); 
ResultSet rs; 

rs = st.executeQuery("select * from Customer where customer_number='" + userid + "' and passwd ='" + pwd + "'"); 

if (rs.next()) { 
    session.setAttribute("userid", userid); 
    //out.println("welcome " + userid); 
    //out.println("<a href='logout.jsp'>Log out</a>"); 
    response.sendRedirect("success.jsp"); 
} else { 
    out.println("Invalid password <a href='login_page.jsp'>try again</a>"); 
    out.println(pwd); 
    out.println(userid); 

} 

正如你可能会告诉这是通过无效的密码,因为输入值不是MD5格式。无论如何,我可以将密码转换为MD5或解密数据库密码,以便它们匹配?

+0

''' “SELECT * FROM客户那里CUSTOMER_NUMBER ='” + userid +“'和passwd = MD5('”+ pwd +“')”)''''' – waplet 2015-03-02 15:36:28

回答

0
  1. 不能提取从哈希密码。 这是不可能的,因为许多密码可以具有相同的MD5。想象一下,你有一个1GB文件的MD5。这将是一个很好的压缩,但这不是因为你无法恢复初始信息。散列不是加密。

  2. 您可以比较哈希值:

    • 看到MessageDigest获得MD5:

      MessageDigest.getInstance("MD5").digest(yourString.getBytes("UTF-8"));