BCrypt генерирует разные хэши, используя одну и ту же соль, строку и фактор - PullRequest
1 голос
/ 01 июля 2011

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

Вот что я знаю

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

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 01 июля 2011

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

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 на самом деле не проблема здесь.

1 голос
/ 01 июля 2011

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

...