Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将输入的密码与数据库中的BCrypt哈希密码进行比较_Java_Mysql_Database_Hash_Bcrypt - Fatal编程技术网

Java 将输入的密码与数据库中的BCrypt哈希密码进行比较

Java 将输入的密码与数据库中的BCrypt哈希密码进行比较,java,mysql,database,hash,bcrypt,Java,Mysql,Database,Hash,Bcrypt,我正在尝试登录,将输入的密码和用户名与我的数据库进行比较,如果两者匹配,则可以登录。 我刚开始使用MySQL和BCrypt。 以下是我目前的代码: @FXML void anmeldenButton(ActionEvent event) throws NamingException, ClassNotFoundException { String myUrl = "jdbc:mysql://localhost:3306/pwmanager?verifyServerCert

我正在尝试登录,将输入的密码和用户名与我的数据库进行比较,如果两者匹配,则可以登录。 我刚开始使用MySQL和BCrypt。 以下是我目前的代码:

@FXML
    void anmeldenButton(ActionEvent event) throws NamingException, ClassNotFoundException {
        String myUrl = "jdbc:mysql://localhost:3306/pwmanager?verifyServerCertificate=false&useSSL=true";
        Connection conn = null;
        username = tfuser1.getText().toString();
        try {
            conn = DriverManager.getConnection(myUrl, "", "");
            query = "SELECT benutzername, passwort FROM nutzer WHERE (benutzername = ? and passwort = ?)";
            PreparedStatement ps = conn.prepareStatement(query);
            ps.setString(1, username);
            ps.setString(2, password);
            ResultSet rs = ps.executeQuery();

            while (rs.isBeforeFirst()) {
                checkUser = rs.getString(1);
                checkPass = rs.getString(3);

                if (BCrypt.checkpw(pf1.getText(), checkPass) && (checkUser.equals(username))) {
                    System.out.println("yay");
                } else {
                    System.out.println("ney");
                }
            }

            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

谢谢你的帮助

您的代码没有多大意义

输入的密码不可能等于存储的密码,因为存储的密码是散列的,而输入的密码不是。所以你不能用

and passwort = ?
其次,查询只选择两个值,但随后使用

checkPass = rs.getString(3)
由于只有用户名,您需要从数据库中获取存储的哈希密码,然后使用Bcrypt验证输入的密码和存储的哈希密码是否匹配

而且

while (rs.isBeforeFirst())
也没有什么意义,查询应该返回0或一行。所以只要使用

if (rs.next())

遗漏了问题?啊,对不起!我没有结果!if语句从来都不是真的或假的。如果有两个条件,则有一个if。你有没有想过使用调试器和/或附加的print语句来解释它的else分支为什么会出现这种情况?除此之外,你正在混合不同的层;您的ui代码不应该直接与数据库通信。您将抽象放在这些层之间,以避免一个类在几个monster方法中完成所有工作。