2015-01-31 106 views
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)頁面,或在數據層?然後,你怎麼會建議我把這個哈希密碼和我的其他屬性放在我的數據庫中?我應該直接將它存儲爲散列值,或者先將它存儲爲純文本,然後將其更新爲散列值。謝謝!

+2

將salt存儲爲純文本,並將散列存儲爲字節或base64編碼文本。根本不要存儲密碼。 – 2015-01-31 18:18:25

+1

請參閱https://crackstation.net/hashing-security.htm。除了@ AndrewBarber的評論之外,還要確保你在*服務器*上進行哈希處理 - 你把邏輯放在哪裏並不重要,因爲你確保你不會在客戶端做它。 – 2015-01-31 18:22:54

+0

是的,我設法將我的用戶名作爲salt傳遞給哈希密碼。我將代碼放在我的數據層(添加到數據庫)和表示層(比較登錄輸入的密碼)上。十分感謝大家! – user3763216 2015-01-31 18:41:21

回答