我有一個簡單的密碼加密器,當用戶註冊時,它給了我一個哈希/鹽漬密碼來存儲在我的數據庫中。代碼:加密在登錄時比較哈希和鹽漬密碼
public static string GenerateHashWithSalt(string enteredPassword, string enteredSalt)
{
string sHashWithSalt = enteredPassword + enteredSalt;
byte[] saltedHashBytes = Encoding.UTF8.GetBytes(sHashWithSalt);
System.Security.Cryptography.HashAlgorithm algorithm = new System.Security.Cryptography.SHA256Managed();
byte[] hash = algorithm.ComputeHash(saltedHashBytes);
return Convert.ToBase64String(hash);
}
當用戶登錄時,我相信我不能簡單地把輸入的密碼改回通過這個代碼和比較,因爲它會給我不同的結果。我如何只需比較存儲的密碼和輸入的登錄密碼?
也許我沒有記錯的話我的密碼的教訓,但它正是你應該做的,當你從用戶的密碼,您鹽和擁有它,然後比較醃製+哈希密碼在DB中。它應該是相同的字符串。沒有隨機性,它是一個完全確定性的函數。 – OopsUser 2013-02-27 19:54:21
散列算法是冪等的:相同的輸入=相同的輸出。 – 2013-02-27 19:56:09
請注意,單次迭代SHA-256不適合使用密碼哈希。我使用PBKDF2,使用'Rfc2898DeriveBytes'類至少10000次迭代。 – CodesInChaos 2013-02-27 20:02:34