У меня возникли проблемы с получением пароля открытого текста и предыдущего хеша, чтобы он соответствовал методу BCrypt checkpw (plaintextpw, previoushash).
В сервлете регистра я беру введенный пароль, хеширую его с помощью метода hasphpw (password, genSalt) BCrypt и сохраняю его в db.
В сервлете входа я беру этот хеш из 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");
}
API BCrypt очень прост - здесь
Я не хранил соль, потому что с помощью BCrypt вы, возможно, не нуждаетесь - так что я делаю неправильно?