2014-06-13 2 views
0

Я случайно набрал неверный пароль и прошел проверку. Я узнал, что пароли были сохранены с дополнительными солями.MVC BCrypt.Verify позволяет использовать разные пароли

this.password = BCrypt.Net.BCrypt.HashPassword(prefixSalt + password + suffixSalt, BCrypt.Net.BCrypt.GenerateSalt(9)); 

И проверка:

BCrypt.Net.BCrypt.Verify(prefixSalt + password + suffixSalt, this.password); 

В этом случае пароли укороченным до 8 символов и что-нибудь после восьмого символа игнорируется. Можно ли устранить эту проблему, не требуя от всех пользователей менять свои пароли?

+0

Почему, по вашему мнению, пароли были усечены до 8 символов? –

+0

Я не знаю почему. Я тестировал без префикса и суффикса и отлично работал ... но это не мой вопрос. Я только стараюсь не менять пароли. – Ila

ответ

1

Невозможно изменить процесс для bcrypt, это односторонний алгоритм. Вы можете «исправить» данные, следуя процесс, как:

if (BCrypt.Verify(password, storedHash)) { 
    // Log on user 
} else if (BCrypt.Verify(prefixSalt + password + suffixSalt, storedHash)) { 
    this.password = BCrypt.HashPassword(password); 
    // Save to database 
    // Log on user 
} else { 
    // User details incorrect 
} 

Однако, если пароль будет обрезано (хотя я не могу понять, почему это - возможно, ошибка находится в другом месте в коде?), Это будет не работает, поскольку вначале это позволяло бы кому-либо устанавливать чужой пароль.

Короткий ответ: No, вам необходимо сбросить пароль каждого.

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