如何在mysql数据库的密码字段中验证密码?

时间:2015-10-18 04:59:18

标签: java mysql validation jtextfield

我正在使用mysql数据库。

当我使用Name和ID从数据库进行验证时,我的代码正在运行。 但是,当我使用密码进行验证时,我不能因为它是哈希/加密的。 我希望如果数据库中的密码与id匹配则成功

我的验证按钮: 老师是我的桌子

try {
        String url = "jdbc:mysql://localhost:3306/GradeSystem";
        String username = "root";
        String password = "";

        com.mysql.jdbc.Connection con = (com.mysql.jdbc.Connection) DriverManager.getConnection(url, username, password);
        Statement stmt = con.createStatement();

        String sql="SELECT * from TEACHER";

        ResultSet rs = stmt.executeQuery(sql);
        String user=TID.getText();//variable name of my firsttxtfield
        String pwd= new String (TPASS.getText());//variable name of my 2nd txtfield
        int tmp=0;
        while(rs.next()) {
            String uname=rs.getString("TID");//TID name in my database
            String pssword=rs.getString("TPASS"); //TID name in my database
            if ((user.equals(uname)) && (pwd.equals(pssword)))
            {
                this.dispose();
                new TeacherAccount().setVisible(true);

                tmp++;

            }
        }
        if (tmp==0) {
            JOptionPane.showMessageDialog(null, "Incorrect Password and Username!");
        }
    }
    catch (Exception e){
        JOptionPane.showMessageDialog(this, e.getMessage());
    }//i know my code is unclean im trying to implement first :)

任何想法如何解决这个或任何其他的解决方法来实现相同的?对不起英语。

3 个答案:

答案 0 :(得分:1)

重点是你没有存储原始密码。因此,两种不同的字符串的比较是不可能的。所以,你需要这样的东西 -

if(encodedPassword.equals(encode(rawPassword))) { /* They passed */ }

这会将原始字符串与数据库中编码的字符串进行比较。我建议你研究在数据库中插入密码并使用相同技术的代码。

答案 1 :(得分:1)

你做错了。你根本不应该比较密码。让数据库使用其散列函数执行该操作,与存储密码时使用的相同。你感兴趣的只是一件事,一件事:

  • 是否有使用此用户名和密码的用户?

所以你的SQL应该看起来像

select count(*) from users where tid = ? and tpass = ?

第二个?对于某些 f ,可能会被 f(?)替换。

原因是您不想泄漏(甚至是您自己的应用程序)任何有关userID错误的信息,或者它是正确的但是密码错误。你关心的只是用户存在'或者'没有这样的用户'。您不希望攻击者知道它是哪个,而实现这一目标的失败安全方法就是您不了解自己。只有数据库知道。

答案 2 :(得分:0)

这背后的想法是,如果您将密码作为原始数据存储在数据库中,那么比较

inputRawPassword.equals(dbRawpassword)

如果密码存储为hashed,那么对于原始密码,用户输入再次使用您在数据库中存储时用于散列的算法散列它,然后比较两个哈希值,即

hashInputPassword = hashFunction(intputRawPassowd);
hashInputPassword.equals(dbHashPassword)

希望它可以帮到你