Как использовать jBCrypt для сравнения хешей паролей?

У меня возникают проблемы с получением пароля в виде открытого текста и предыдущего хеша для сопоставления с использованием метода BCrypt checkpw (plaintextpw, previoushash).

В сервлете регистрации я беру введенный пароль, хэширую его с помощью метода BCrypt hashpw (password, genSalt) и сохраняю его в базе данных.

В сервлете входа в систему я беру этот хэш из базы данных и использую BCrypt checkpw, чтобы проверить, соответствует ли он введенному паролю.

Это никогда не совпадает. Это отлично работает в моем обычном java-приложении, но не в веб-приложении. Ни у кого больше нет этой проблемы, поэтому я полагаю, что, должно быть, делаю это неправильно:

//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 очень прост - здесь

Я не храню соль, потому что с BCrypt вам якобы не нужно - так что я делаю не так?


person VNorman    schedule 15.03.2012    source источник
comment
РЕШЕНО - поле базы данных, в котором хранился pw_hash, было 80 символов .. На 20 больше, чем хеш BCrypt. Обрезка хэша или сброс поля базы данных до 60 символов сработали. Надеюсь, это поможет кому-то другому.   -  person VNorman    schedule 16.03.2012
comment
Пожалуйста, создайте ответ самостоятельно и примите это, чтобы закрыть вопрос, вместо того, чтобы добавлять РЕШЕННОЕ к его заголовку.   -  person Bergi    schedule 16.03.2012


Ответы (1)


Поле базы данных, в котором хранился pw_hash, составляло 80 символов. Это было на 20 символов больше, чем хеш BCrypt. Обрезка хэша или сброс поля базы данных до 60 символов сработали.

(Публикация данного ответа [см. комментарии к вопросу], чтобы удалить вопрос из очереди без ответов. Пользователя попросили сделать это почти год назад, но еще не сделал этого. Кредит за этот ответ принадлежит им)

person Ren    schedule 12.02.2013