2010-05-19 34 views
14

我通過使用產生從我的密碼鹽和哈希值,[Sql-Server]用於密碼salt和hash值的數據類型以及長度是多少?

string salt = CreateSalt(TxtPassword.Text.Length); 
string hash = CreatePasswordHash(TxtPassword.Text, salt); 

private static string CreateSalt(int size) 
{ 
    //Generate a cryptographic random number. 
    RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider(); 
    byte[] buff = new byte[size]; 
    rng.GetBytes(buff); 

    // Return a Base64 string representation of the random number. 
    return Convert.ToBase64String(buff); 
} 

private static string CreatePasswordHash(string pwd, string salt) 
{ 
    string saltAndPwd = String.Concat(pwd, salt); 
    string hashedPwd = 
    FormsAuthentication.HashPasswordForStoringInConfigFile(
    saltAndPwd, "sha1"); 

    return hashedPwd; 
} 

你會建議在SQL Server中存儲這些值的數據類型是什麼?任何建議...

鹽:9GsPWpFD

哈希:E778AF0DC5F2953A00B35B35D80F6262CDBB8567

+0

+很好的問題。 – 2010-05-19 06:03:50

回答

7

ASPNET_DB說,這 - 錯不了。

Password nvarchar(128) NOT NULL, 
PasswordSalt nvarchar(128) NOT NULL, 

,而128可以看起來很多,不同類型的加密可能會導致更大的字符串比你開始了。絕對沒有理由不跟隨那些花費數千人工時開發asp.net會員系統的非常聰明的人的領導。

+10

-1 /對不起,但「微軟聰明,我愚蠢,我遵循馬薩」是一種不好的態度。 Especialyl給予了微軟有時從微軟大量的愚蠢行爲。帶來爭論。 – TomTom 2010-05-19 05:46:02

+5

@tomtom - 哇。我想你在實現安全性堆棧方面有很多經驗,並且已經完成了源代碼,列和存儲過程的每一行,構成了非常健壯和靈活的asp.net提供程序堆棧,以備份對語句的簡要判斷。嗯......我知道有人適合這種描述..... – 2010-05-19 05:52:41

+3

嗯,我做到了。但我也嘗試用我的大腦,而不是盲從其他人可能做的事 - 出於完全不同的理由,你甚至不關心給予。順便說一句,我甚至懷疑,即使MS會花費數千(!)個工時來開發asp.net會員系統,而其他人完全可以使用mabe 100。而且,在智能人士完全忽略了使其以任何方式擴展之後,你知道會員制在後來的.net版本中被「固定」了嗎? MS並不完美。 – TomTom 2010-05-19 06:01:35

1

我們將密碼存儲爲二進制SHA512哈希

+2

不使用鹽這是愚蠢的和嚴重的疏忽,因爲它意味着一個簡單的字典攻擊可以破解密碼 - 並且這樣做越快,您的列表的密碼越多。 – TomTom 2010-05-19 06:02:56

+6

你也可以用鹽做同樣的工作 – 2010-05-19 13:37:56

+0

@JoePhilllips我認爲他會改變彩虹桌的攻擊方式,在使用鹽的時候避免這種攻擊。 – ghord 2014-09-30 14:39:13