4

Это может быть скорее концептуальный вопрос. В Asp.Net удостоверяющем личность PasswordHasher генерирует другой хэш для одной и той же строки, каждый раз, когда вы делаете:Как проверить пароль вручную в идентификаторе Asp.Net 2?

new PasswordHasher.HashPassword("myString"); 

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

Может кто-нибудь, пожалуйста, объясните мне это? Не следует ли хэшировать один и тот же результат строки в том же хеше, а если нет, то как сам Identity понимает, что два разных хэша на самом деле одинаковы?

ответ

9

PasswordHasher каждый раз генерирует разные хеши, поскольку использует технологию salting. Этот метод защищает хешированный пароль от атак со словарем. Кстати, вы можете использовать следующий код для ручного подтверждения пароля:

if(PasswordHasher.VerifyHashedPassword("hashedPassword", "password") 
    != PasswordVerificationResult.Failed) 
{ 
    // password is correct 
} 
+0

Куда соль переходит в метод? для правильного «хэширования» пароля он должен использовать ту же соль, которая использовалась для хеширования исходного пароля. – webworm

+1

@webworm соль включена в 'hashedPassword'. Таким образом, передавая «hashedPassword», соль также перешла к методу. –