2009-12-01 59 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