我的任務是編寫一種計算密碼哈希的新方法,以取代我們感覺不夠安全的舊方法。很久以前,我讀了Security Driven .NET這本書,其中我瞭解到重要的部分是使用具有可配置的轉數(而不是簡單的哈希)的算法,並且在.NET中推薦的算法是稱爲PBKDF2
用於密碼處理。我還認爲,作爲對ASP.NET如何處理密碼的一種改進,如果通過使用PBKDF2創建主數據庫的方式將存儲在數據庫中的結果哈希與用戶(名稱或ID)加密綁定在一起鍵,然後使用用戶名(或ID)使用HKDF創建派生密鑰。但是,再次,這是我從一本我目前無法訪問的書中讀到的表面知識,所以如果我的記憶是正確的,我不能重新檢查。在.NET中使用PBKDF2和HKDF進行密碼哈希處理
此外,我以前沒有使用.NET DerivedBytes API,所以我可能會做錯。所以我的問題是這樣的:我在下面的代碼中正確地做事情嗎?我是否正確使用API?這個實現是否「足夠安全」?或者我做錯了什麼,它完全消除了所有的安全性?
protected override byte[] ComputeHash(string user, string salt, string password)
{
var userBytes = user.ToBytes();
using (var pbkdf2 = new PBKDF2(MacFactories.HMACSHA512, password.ToBytes(), salt.ToBytes()))
{
var masterKey = pbkdf2.GetBytes(128);
using (var hkdf = new HKDF(MacFactories.HMACSHA512, masterKey, userBytes, userBytes))
{
return hkdf.GetBytes(64);
}
}
}