2009-02-24 73 views
10

我需要鹽和散列一些密碼,以便我可以將它們安全地存儲在數據庫中。 對於如何最好地使用Linq To SQL來做到這一點,您有任何建議或想法嗎?使用Linq To SQL鹽漬和散列密碼

+0

使用本:http://encrypto.codeplex.com/ – Omu 2010-09-14 08:36:43

回答

25

LINQ to SQL在這種情況下沒有多大關聯。你可以使用任何你想要的機制,因爲你不會在SQL中進行哈希和醃製。

保存密碼,將沿着這些路線走的步驟:

  1. 收到密碼爲明文,與用戶的ID一起。
  2. 生成(並記住)鹽。
  3. 將鹽與密碼文本相結合,例如,加上它或追加它。
  4. 使用散列函數對結果文本進行散列處理
  5. 將用戶ID,散列和鹽存儲在數據庫中。

驗證密碼就會沿着這些路線走的步驟:

  1. 收到密碼爲明文,與用戶的ID一起。
  2. 從提供的用戶ID中檢索數據庫的散列和鹽。
  3. 將鹽與提供的密碼文本組合在一起。
  4. 用你的散列函數散列結果文本。
  5. 將函數的散列與從數據庫中檢索的散列進行比較。
  6. 如果它們相同,則提供的密碼是正確的。
+0

它是常見爲每個密碼生成並存儲salt,而不是將一個共同的salt與每個收到的密碼結合起來?當然,它「似乎」更安全,但是因爲鹽只是存儲在數據庫中......只是想知道。 – JMD 2009-02-24 17:24:31

1

基本上如@Vojislav所說。

你可能想看看bcrypt的哈希 - 它被譽爲非常好。

0

如果是用戶帳號登錄你不想只是鹽+密碼哈希,您還希望按照RFC2898文檔中的PBKDF2使用密鑰擴展。

這裏是API做你需要使用例子是什麼: https://sourceforge.net/projects/pwdtknet

在指定的長度也創建加密隨機鹽