为了给你一些背景知识,我和我的团队正在创建一个将用户名和密码存储在数据库中的程序。我们正在使用 Java 并通过 Java 代码与数据库进行交互。
我们使用 Jasypt 来加密用户名和密码。我在 Jasypt 中使用 BasicPasswordEncryptor 来加密两者。用户名加密良好并存储在数据库中。但是,当检查登录名并说 BasicPasswordEncryptor 尝试根据加密密码检查明文用户名时,它总是返回 false。我已经进行了一系列检查以关注问题发生的位置。据我所知,这是 Jasypt 的问题。有谁知道问题是什么,可能的解决方案或更优化的方法?谢谢你。我将发布代码。
这是加密发生的地方。
public void register(String userName, String passWord){
String encryptedUsername = e.encryptPassword(userName);
String encryptedPassword = e.encryptPassword(passWord);
System.out.println("Registered eU: " + encryptedUsername);
try {
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/PandaBox", "root", "");
statement = con.prepareStatement("insert into Users (username, password, logged) values (?,?,?)");
statement.setString(1, encryptedUsername);
statement.setString(2, encryptedPassword);
statement.setInt(3, 0);
boolean x = statement.execute();
System.out.println("IT REGISTERED");
} catch (SQLException o) {
o.printStackTrace();
}
}
其中“e”是 BasicPasswordEncryptor 对象。这是登录检查。
public boolean checkLogin(String inputedUsername, String inputedPassword) {
try {
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/PandaBox", "root", "");
statement = con.prepareStatement("select * from Users");
rs = statement.executeQuery();
System.out.println(inputedUsername + " / " + inputedPassword);
while(rs.next()){
String usernameInDatabase = rs.getString("username");
System.out.println(usernameInDatabase);
if (e.checkPassword(inputedUsername, usernameInDatabase)) {
System.out.println("Username correct.");
statement = con.prepareStatement("select password from Users where username = ?");
statement.setString(1, usernameInDatabase);
rs = statement.executeQuery();
String passwordInDatabase = rs.toString();
if(passwordIsCorrect(inputedPassword, passwordInDatabase)){
return true;
}
}
}
return false;
} catch (SQLException o) {
// TODO Auto-generated catch block
o.printStackTrace();
return false;
}
}