我正在尝试登录,将输入的密码和用户名与我的数据库进行比较,如果两者匹配,则可以登录。 我刚开始使用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();
}
}
感谢您的帮助!
答案 0 :(得分:1)
您的代码没有多大意义。
输入的密码可能不等于存储的密码,因为存储的密码是经过哈希处理的,而输入的密码则不是。所以你不能使用
and passwort = ?
其次,您的查询只选择两个值,但随后使用
checkPass = rs.getString(3)
由于仅使用用户名,您需要从数据库中获取存储的哈希密码,然后使用Bcrypt验证输入的密码和存储的哈希密码是否匹配。
另外,
while (rs.isBeforeFirst())
也没有多大意义,并且查询应该返回0或一行。所以只需使用
if (rs.next())