首頁 三十天.NET❤️Azure漸進式開發專案 輕量高效.NET Core開源Blog引擎:Miniblog.Core
首頁 三十天.NET❤️Azure漸進式開發專案 輕量高效.NET Core開源Blog引擎:Miniblog.Core
×

IT鐵人賽連結:https://ithelp.ithome.com.tw/articles/10205239

  在正式專案中密碼少不了需要加鹽處理,其中最常見的就是HASH。HASH算法是單向的,而且無法被反向計算。源頭數據改動一點點,HASH的結果也會完全不同。這樣特性很適合保存、驗證密碼。

  但只有單純hash加上密碼簡單的話,怪客可以用暴力比對方式,得出你的密碼,所以在Miniblog使用廣受認證的PBKDF2方式加密。


Code:

private bool VerifyHashedPassword(string password, IConfiguration config)
{
    byte[] saltBytes = Encoding.UTF8.GetBytes(config["user:salt"]);

    byte[] hashBytes = KeyDerivation.Pbkdf2(
        password: password,
        salt: saltBytes,
        prf: KeyDerivationPrf.HMACSHA1,
        iterationCount: 1000,
        numBytesRequested: 256 / 8
    );

    string hashText = BitConverter.ToString(hashBytes).Replace("-", string.Empty);
    return hashText == config["user:password"];
}

使用、原理:

使用方式很簡單,安裝NuGet KeyDerivation 就好:

Install-Package Microsoft.AspNetCore.Cryptography.KeyDerivation -Version 版本

KeyDerivation.Pbkdf2方法,使用五個參數 :
1.password 顧名思義就是密碼,不多解釋。
2.salt,這邊可以使用一個密鑰key只有你知道,藉由Encoding.UTF8.GetBytes轉成byt陣列資料,傳進Pbkdf2參數,當鹽使用。
3.prf,PRF是一個偽隨機函數
4.iterationCount,hash次數,次數的不同,得出結果也會不同,通常越多次代表怪客破解難度變高,但效能會差點
5.numBytesRequested,指定得出結果長度

public static byte[] Pbkdf2(string password, byte[] salt, KeyDerivationPrf prf, int iterationCount, int numBytesRequested);

留言


Comments are closed