BCrypt генерирует разные хэши с одинаковыми солью, строкой и коэффициентом

Использование одной из реализаций BCrypt на C# для хеширования паролей и их сохранения в базе данных SQL. Однако, когда я возвращаюсь для проверки строки хэша, BCrypt генерирует хеш, отличный от того, который находится в базе данных для сравнения. Соли явно такие же, как и факторы.

Вот что я знаю

$2a$12$vF/1s3MqIzHwnDshyzH/roYUelofrj4UWv./vzWqk4o2K0uwhix7W на самом деле "Qwerty123" и хранится в столбце, который инициализируется как [nvarchar] (200).

Когда я использую BCrypt.Verify() или BCrypt.CheckPassword() в зависимости от реализации, я отслеживаю его до тех пор, пока он не сделает сравнение, и хэш, который он собирается сравнить с ранее упомянутым, равен $2a$12$vF. /1s3MqIzHwnDshyzH/rOKVRePZSXFXaIpDv6.IPkbPEoOxZgSEe

Если вы присмотритесь, то увидите, что соли и факторные части одинаковы. Любая идея, что может быть причиной этого?

Явную реализацию, с которой я работаю, можно найти здесь http://bcrypt.codeplex.com/.

Мой вопрос может быть связан с приложением ASP.NET MVC 3, BCrypt.CheckPassword ошибка


person GRush    schedule 30.06.2011    source источник
comment
Если вы повторно BCrypt одну и ту же строку на одном сервере, вы продолжаете получать одну и ту же зашифрованную версию?   -  person Brad    schedule 01.07.2011
comment
да, используя одну и ту же строку и соль, сгенерированный хэш каждый раз одинаков.   -  person GRush    schedule 01.07.2011


Ответы (2)


Предложение для тестирования

private void FindWhatsFailing(string password) //password = Whatever you're passing in to verify BCrypt is working
{
  const string expectedpassword = "Qwerty123";
  if(expectedpassword != password)
  {
      Debug.WriteLine("My password isn't what I thought it was");
      return;
  }
  string hashed = BCrypt.HashPassword(expectedpassword , BCrypt.GenerateSalt(12));
  if(!BCrypt.Verify(expectedpassword , hashed))
  {
     Debug.WriteLine("Something is wrong with BCrypt");
     return;
  }

  /// ... Test hashing password, compare to hash of expectedpassword, verify password against hash of itself and expectedpassword

 Debug.WriteLine("Everything worked, maybe the database storage is off?");
}

Если Bcrypt.Verify не работает в этом примере для вас, я понятия не имею, что не так, но я предполагаю, что проблема здесь не в Bcrypt.

person DMulligan    schedule 01.07.2011

Проблема заключалась в входе в Bcrypt. Я использовал Multiview и MultiViewPanels для сбора пользовательских данных (из которых пароль), разрешить пользователю проверять все данные, затем на последнем MultiViewPanel добавить пользователя в БД, и в этом процессе были обратные передачи. После некоторых исследований я обнаружил, что поля пароля не сохраняют свое текстовое свойство после обратных передач по соображениям безопасности, и поскольку я передавал txtPassword.text в Bcrypt, это было проблемой. Это создает для меня новую проблему.

person GRush    schedule 01.07.2011