使用MD5哈希密码JAVA注册/登录

时间:2018-04-24 16:05:56

标签: java mysql md5 password-hash

我正在尝试创建一个使用MD5哈希密码的登录/注册系统。

到目前为止,我已设法对数据库中的密码进行哈希处理,但在尝试登录时无法识别哈希密码。

可能是一个简单的修复,任何帮助都可以:)

注册JAVA

String s8 = tfPassword.getText();

MessageDigest md = MessageDigest.getInstance("MD5");
                        md.update(s8.getBytes());
                        byte [] byteData = md.digest();

                        StringBuilder sb = new StringBuilder(32);
                        for (byte b : byteData) {
                            sb.append(String.format("%02x", b & 0xff));
                        }

Statement st = con.createStatement();

st.executeUpdate("insert into Login (StaffID, UName, PWord, Staff) values('"+StaffID+"','"+s7+"','"+sb+"','Yes')");

登录JAVA:

String s2 = tfPassword.getText();

                    MessageDigest md = MessageDigest.getInstance("MD5");
                    md.update(s2.getBytes());
                    byte [] byteData = md.digest();

                    StringBuilder sb = new StringBuilder(32);
                    for (byte b : byteData) {
                        sb.append(String.format("%02x", b & 0xff));
                    }

                    Statement st = con.createStatement();   


                    // SQL Statements 
                    st.executeQuery("SELECT * FROM login WHERE UName= '"+s1+"' and PWord = '"+sb+"'");

1 个答案:

答案 0 :(得分:0)

为了未来SOuls的利益,他们在寻找关于“MD5哈希密码”的答案时发现了这个问题:

对密码使用MD5哈希已损坏。不要这样做。

https://security.stackexchange.com/questions/19906/is-md5-considered-insecure

虽然我们讨论的是安全性问题,但我们也鼓励使用带有绑定占位符的预准备语句,而不是编写易受SQL注入攻击(或看起来容易受攻击)的动态SQL。

看起来问题根本不是关于密码的MD5。看起来它真的是一个更简单的问题:

问:如何判断执行的SELECT语句是否返回了(ny)行?

答:如果SQL语句为executeQuery,则ResultSet方法返回SELECT对象。使用next方法从结果集中检索下一行。

这样的事情:

    Statement st = null;
    ResultSet rs = null;

    try {

      st = con.CreateStatement();
      rs = st.executeQuery("SELECT '42' AS fortytwo");

      while( rs.next() ) {
        String foo = rs.getString("fortytwo");
        // System.out.println("yay! we got another row!");
      }

    } catch (SQLException e) {
      //
    } finally {
       if (rs != null) { rs.close(); }
       ...
相关问题