產生 Identity PasswordHash

在 Microsoft.AspNetCore.Identity 中預設的 User Entity 屬性有 PasswordHash ,用來儲存密碼雜湊,避免直接儲存密碼明文,而 Identity 已經幫我們做好許多事情了,不需要由我們手動計算出 PasswordHash,已經自動幫我們做好了許多功能,例如登入:
    
// ignInManager<User> _signInManager
string password = "";
var result = await _signInManager.PasswordSignInAsync(user, password, true, true);
    

註冊:
    
// UserManager<User> _userManager;
string userName = "";
string password = "";
user = new()
{
    UserName = userName,
};

_userManager.CreateAsync(user, password).GetAwaiter().GetResult();
    

那我們有沒有辦法手動計算 PasswordHash 呢?

需要先安裝套件:
    
    dotnet add package Microsoft.AspNetCore.Identity
    

使用密碼產生 Hash:
    
var passwordHasher = new PasswordHasher<string>();

string password = "ruyut";
string hashedPassword = passwordHasher.HashPassword(null, password);
Console.WriteLine($"Hashed Password: {hashedPassword}");
    

雖然每次產生的結果都有些許的不同,這是為了防止彩虹表攻擊,但是如果替換 Users 資料表內的 PasswordHash ,會發現都是可以成功登入。
    
AQAAAAEAACcQAAAAELmHxg4jNWov+fbgiboFDAydaInW53jK8hgZwLGzTzMXYn+TKx4M8FITVESnrmL87A==
AQAAAAEAACcQAAAAEEaTJcpeFmwv4S6X1agI4YpjYcRqjldBqYgib446R3c5MJwp7zADn5bzBa+q1Brq6w==
    

留言