2010-06-11 164 views
1

如果我用這樣的鹽創建:C#哈希密碼創建鹽問題

public class User 
    { 
     private const int Hash_Salt_Length = 8; 
     private byte[] saltBytes = new byte[Hash_Salt_Length]; 


     public User() 
     { 
      RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider(); 
      rng.GetNonZeroBytes(saltBytes);  
     } 
     .... 

} 

saltBytes字節數組將爲每個會話不同(重新啓動應用程序)。我如何檢查密碼以允許用戶登錄我們的應用程序?

+0

你可以使用這個:http://encrypto.codeplex.com/ – Omu 2010-09-14 08:35:42

回答

8

您需要將鹽與密碼哈希一起存儲在數據庫中。

請注意,您不應該調用GetNonZeroBytes,因爲它提供的隨機性較小。

+0

而不是調用GetBytes()? – 5YrsLaterDBA 2010-06-11 19:15:32

+0

是的,你應該。 – SLaks 2010-06-11 19:30:17

3

如果salt在每次應用程序重新啓動時發生更改,則必須將其存儲在數據庫中(在用戶記錄上)。

1

鹽是您創建用戶記錄時生成的一種靜態事物,並且將其與用戶ID和密碼+ salt的散列一起存儲。

當用戶嘗試登錄時,可以使用ID查找鹽,將其與其密碼組合,並將其與散列值進行散列並與存儲的散列進行比較。如果它們匹配,它們就會進入。

鹽的存在使得有權訪問安全數據庫的攻擊者無法預先準備密碼 - >哈希映射數據庫,然後執行簡單的反向查找以嘗試確定密碼。