2009-12-01 100 views
10

在我的ASP.NET Web應用程序中,我使用SHA512對我的用戶密碼進行哈希處理。在數據庫中存儲SHA512密碼哈希

儘管很多SO和Google搜索我不清楚我應該如何將它們存儲在數據庫中(SQL2005) - 下面的代碼顯示了我如何創建一個字符串的散列基礎知識,我目前將它插入數據庫到Char(88)列中,因爲這似乎是一致創建的長度

將它保持爲字符串是實現它的最佳方式,如果是這樣,它總是在SHA512上爲88個字符正如我在Google上看到的一些奇怪的東西)?

Dim byteInput As Byte() = Encoding.UTF8.GetBytes(sSalt & sInput) 
Dim hash As HashAlgorithm = New SHA512Managed() 
Dim sInsertToDatabase As String = Convert.ToBase64String(hash.ComputeHash(byteInput)) 
+0

看看[鏈接文本](http://altairiswebsecurity.codeplex.com)/如果你想使用asp.net會員。它具有非常開放的表格結構,因此可能更容易與當前數據庫集成。 – jhexp 2010-04-14 13:20:41

回答

15

SHA512輸出512位或64字節。如果您願意,您可以將這64個字節存儲在二進制列中。

如果您想要在應用程序之外處理散列,則更適合存儲Base64字符串,就像您現在正在做的那樣。 Base64大約增加了33%的不斷開銷,所以你可以期望字符串總是88個字符。

這就是說,ASP.NET有一個fairly comprehensive authentication system內建的,你應該使用。

+0

.NET中的字節數組直接映射到T-SQL中的BINARY(或VARBINARY) – RickNZ 2009-12-01 23:27:51

+0

感謝@RickNZ - 非常感謝。 – Chris 2009-12-02 06:40:10

+1

感謝@ Vinko所有的澄清 - 我喜歡擁有安全模型,並且準確理解到底發生了什麼,並知道我可以隨時將密碼的可用性從ASP.NET遠離 - 我一直在那裏被咬之前。也許是誤導,當然不是我是一個控制怪物或任何東西;) – Chris 2009-12-02 06:44:20