0
我試圖找出一種方法將鹽漬散列的密碼存儲到我的數據庫中。這是我第一次這樣做,所以我不確定這個過程應該如何進行。如何在數據庫中存儲鹽漬散列密碼
我的ASP.NET C#Web應用程序首先需要用戶註冊一個帳戶。我有一個數據層,用於調用數據層中方法的業務層,以及用於顯示錶單控件的表示層。目前我使用純文本將密碼存儲在數據庫中。我們在數據層中調用createAccount()
方法。用戶名,密碼和其他屬性傳遞到createAccount()
方法來調用SQL查詢來創建Account
記錄。用戶名和密碼由用戶在註冊頁面中指定。我發現,給我提供了一個方法生成與哈希密碼如下網站:
public static string GenerateHashWithSalt(string password, string salt)
{
// merge password and salt together
string sHashWithSalt = password + salt;
// convert this merged value to a byte array
byte[] saltedHashBytes = Encoding.UTF8.GetBytes(sHashWithSalt);
// use hash algorithm to compute the hash
System.Security.Cryptography.HashAlgorithm algorithm = new System.Security.Cryptography.SHA256Managed();
// convert merged bytes to a hash as byte array
byte[] hash = algorithm.ComputeHash(saltedHashBytes);
// return the has as a base 64 encoded string
return Convert.ToBase64String(hash);
}
我應該在哪裏把這個,在註冊頁面,在後臺代碼(.cs
)頁面,或在數據層?然後,你怎麼會建議我把這個哈希密碼和我的其他屬性放在我的數據庫中?我應該直接將它存儲爲散列值,或者先將它存儲爲純文本,然後將其更新爲散列值。謝謝!
將salt存儲爲純文本,並將散列存儲爲字節或base64編碼文本。根本不要存儲密碼。 – 2015-01-31 18:18:25
請參閱https://crackstation.net/hashing-security.htm。除了@ AndrewBarber的評論之外,還要確保你在*服務器*上進行哈希處理 - 你把邏輯放在哪裏並不重要,因爲你確保你不會在客戶端做它。 – 2015-01-31 18:22:54
是的,我設法將我的用戶名作爲salt傳遞給哈希密碼。我將代碼放在我的數據層(添加到數據庫)和表示層(比較登錄輸入的密碼)上。十分感謝大家! – user3763216 2015-01-31 18:41:21