Чтобы дать вам некоторую информацию, моя команда и я создаем программу, которая хранит имена пользователей и пароли в базе данных. Мы используем Java и взаимодействуем с базой данных через код Java.
Мы используем Jasypt для шифрования имен пользователей и паролей. Я использую BasicPasswordEncryptor в Jasypt для шифрования обоих. Имена пользователей отлично шифруются и прекрасно сохраняются в базе данных. Однако, когда логин проверяется и указанный 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;
}
}