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