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

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

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

В сервлете входа в систему я беру этот хэш из базы данных и использую checkpw 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+"
"); if (BCrypt.checkpw(request.getParameter("password"), dbhash)) { out.println("It matches"); }else{ out.println("It does not match"); }

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

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

14
задан BalusC 15 March 2012 в 23:25
поделиться