【问题标题】:Compare entered Password with BCrypt hashed Password in Database将输入的密码与数据库中的 BCrypt 哈希密码进行比较
【发布时间】:2017-08-05 08:25:04
【问题描述】:

我正在尝试登录,将输入的密码和用户名与我的数据库进行比较,如果它们都匹配,您可以登录。 我刚开始使用 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();
        }
    }

感谢您的帮助!

【问题讨论】:

  • 错过了问题...?
  • 啊s***对不起!我没有得到结果! if 语句永远不会是真或假
  • 你有一个 if there 有两个条件。你有没有想过使用调试器和/或额外的打印语句来嗯,也许可以得到所有的细节来理解为什么 if 去它的 else 分支?
  • 除此之外:您正在混合不同的层;您的 ui 代码不应该直接与数据库对话。您在这些层之间放置抽象,以免一个类在几个怪物方法中完成所有事情。

标签: java mysql database hash bcrypt


【解决方案1】:

您的代码没有多大意义。

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

and passwort = ?

其次,您的查询仅选择两个值,但您随后使用

checkPass = rs.getString(3)

您需要从数据库中获取存储的哈希密码,这要归功于用户名,然后使用 Bcrypt 验证输入的密码和存储的哈希密码是否匹配。

还有,

while (rs.isBeforeFirst())

也没有多大意义,查询应该返回 0 或一行。所以只需使用

if (rs.next())

【讨论】:

    猜你喜欢
    • 2016-03-06
    • 1970-01-01
    • 2019-07-02
    • 1970-01-01
    • 2021-10-23
    • 1970-01-01
    • 2021-09-27
    • 1970-01-01
    • 2014-09-08
    相关资源
    最近更新 更多