2012-03-15 5 views
14

У меня возникли проблемы с получением пароля открытого текста и предыдущего хэша, чтобы он соответствовал методу проверки 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 вы якобы не» Мне нужно - так что я делаю неправильно?

+3

SOLVED - поле базы данных, в котором хранилось pw_hash, составило 80 символов. 20 больше, чем хэширование BCrypt. Обрезка хэша или сброс поля базы данных до 60 символов. Надеюсь, это помогает кому-то другому. – VNorman

+28

Пожалуйста, создайте ответ самостоятельно и примите это, чтобы закрыть вопрос, вместо добавления «SOLVED» в его название – Bergi

ответ

9

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

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

Смежные вопросы