Asp.net

如何在 Asp.Net identity 2 中手動檢查密碼?

  • August 10, 2018

這實際上可能更像是一個概念性問題。在 Asp.Net Identity 中,PasswordHasher 每次為同一個字元串生成不同的雜湊值:

new PasswordHasher.HashPassword("myString");

現在,如果由於某種原因我需要手動將使用者輸入與保存在數據庫中的密碼進行比較,那麼當我對使用者輸入的密碼進行雜湊處理時,我很可能會得到一個與儲存在數據庫中的字元串不同的字元串。

有人可以向我解釋一下嗎?不應該散列相同的字元串導致相同的散列,如果不是,身份本身如何意識到兩個不同的散列實際上是相同的?

PasswordHasher每次生成不同的雜湊值,因為它使用了加鹽技術。這種技術可以保護散列密碼免受字典攻擊。順便說一句,您可以使用以下程式碼手動驗證密碼:

if(PasswordHasher.VerifyHashedPassword("hashedPassword", "password") 
   != PasswordVerificationResult.Failed)
{
   // password is correct 
}
var user = _userManager.Users.SingleOrDefault(p => p.PhoneNumber == model.PhoneNumber);
           if (user == null)
           {
               return RedirectToAction(nameof(Login));
           }

           var result1 = _userManager.PasswordHasher.VerifyHashedPassword(user, user.PasswordHash, model.Password);
           if (result1 != PasswordVerificationResult.Success)
           {
               ModelState.AddModelError(string.Empty, "Invalid login attempt.");
               return View(model);
           }

引用自:https://stackoverflow.com/questions/34443828