Я знаю, что есть много других вопросов с подобной темой, но я не могу найти тот, который создает решение моей конкретной проблемы. У меня есть приложение Java, которое подключается через JDBC к Lamp для проекта Uni, и я пытаюсь сравнить введенный пароль с паролем, связанным с логином, который они также ввели в базе данных MySQL. У меня есть метод хеширования (MD5), который будет хешировать пользователей, но он продолжает бросать исключение нулевого указателя, и я не могу его исправить!Проверьте строку входа в систему с паролем (MySQL & JDBC)
на кнопку печати Код:
private void loginButtonActionPerformed(java.awt.event.ActionEvent evt) {
String pass = passTextField.toString();
try {
try {
lModel.checkLogin(loginTextField.getText(), pass);
} catch (NoSuchAlgorithmException ex) {
Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex);
}
} catch (SQLException se) {
System.out.println(se.toString());
}
}
метод Hashing (и связанные с ними переменные):
private Logins l;
private String password;
public String hashPass(String pass) throws NoSuchAlgorithmException {
MessageDigest mdEnc = MessageDigest.getInstance("MD5");
mdEnc.update(password.getBytes(), 0, password.length());
String md5 = new BigInteger(1, mdEnc.digest()).toString(16); // Encrypted
return md5;
}
Проверить Войти метод (без строки подключения к частной жизни):
public void checkLogin(String login, String pass) throws SQLException, NoSuchAlgorithmException {
Connection con = null;
PreparedStatement stmt= null;
ResultSet rs = null;
l = new Logins();
String passHashed = hashPass(pass);
String username = login;
try {
stmt = con.prepareStatement("SELECT Login, Password from Staff");
rs = stmt.executeQuery();
if (rs.next()) {
if (username.equals(rs.getString("Login"))) {
if (passHashed.equals(rs.getString("Password"))) {
System.out.println("Logged in.");
} else {
System.out.println("Incorrect password - login combination.");
}
} else {
System.out.println("Incorrect log in.");
}
}
} finally {
if (rs != null) try {rs.close();} catch (SQLException se){}
if (stmt != null) try {stmt.close();} catch (SQLException se) {}
if (con != null) try {con.close();} catch (SQLException se) {}
}
}
Редактировать: Все это правильно анализирует и может проверить но я нашел причину, по которой он не регистрируется, потому что код MD5, сгенерированный этим методом, производит другой вывод с паролем, хранящимся в базе данных. Вот база данных одна:
1274d1c52d7a5a9125bd64f1f9a26dce
и генерируемый:
1030416151603361603636256577523441305746075
Пароль является LondonWeight
Любые идеи?
Опубликовать Stacktrace – Mubin