背景を説明するために、私のチームと私は、ユーザー名とパスワードをデータベースに保存するプログラムを作成しています。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;
}
}