У меня возникли проблемы с получением пароля открытого текста и предыдущего хэша, чтобы он соответствовал методу проверки checkcl (метод plaintextpw, previoushash).Как использовать jBCrypt для сравнения хэша паролей?
В сервлете регистра я беру введенный пароль, хеширую его с помощью метода hashpw (password, genSalt) из BCrypt и сохраняю его в db.
В сервлете входа я беру этот хэш из базы данных и использую контрольную кнопку BCrypt, чтобы узнать, соответствует ли он введенному паролю.
Он никогда не совпадает. Это отлично работает в моем обычном приложении Java, а не в webapp. Никто больше не с этой проблемой, поэтому я полагаю, что я должен делать это неправильно:
//RegisterServlet
String pw_hash = BCrypt.hashpw(request.getParameter("password"), BCrypt.gensalt());
String loginInsertString = "insert into login (loname,lopassword,locustomerid)" +
" VALUES ('" + username + "','" + pw_hash + "','" + loginInsert + "');";
//LoginServlet
ResultSet rs = stmt.executeQuery("select lopassword from login where loname = '" +
loginName + "';");
while(rs.next()){
dbhash = rs.getString(1);
}
out.println(dbhash+"<br>");
if (BCrypt.checkpw(request.getParameter("password"), dbhash)) {
out.println("It matches");
}else{
out.println("It does not match");
}
BCrypt API очень прост - here
Я не хранить соль, потому что с BCrypt вы якобы не» Мне нужно - так что я делаю неправильно?
SOLVED - поле базы данных, в котором хранилось pw_hash, составило 80 символов. 20 больше, чем хэширование BCrypt. Обрезка хэша или сброс поля базы данных до 60 символов. Надеюсь, это помогает кому-то другому. – VNorman
Пожалуйста, создайте ответ самостоятельно и примите это, чтобы закрыть вопрос, вместо добавления «SOLVED» в его название – Bergi