Как использовать jBCrypt для сравнения хэшей паролей? - PullRequest
14 голосов
/ 15 марта 2012

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

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

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

НикогдаМатчи.Это прекрасно работает в моем обычном 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");
            }

API BCrypt очень прост - здесь

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

1 Ответ

9 голосов
/ 12 февраля 2013

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

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

...