在数据库中存储SHA512密码哈希值

9
在我的ASP.NET网络应用程序中,我正在使用SHA512对用户密码进行哈希处理。
尽管我在Stack Overflow和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))

如果您想使用asp.net成员资格,可以查看链接文本。它具有非常开放的表结构,因此可能更容易与您当前的数据库集成。 - jhexp
1个回答

14

SHA512会输出512位,即64个字节。如果您希望的话,可以将这64个字节存储在二进制列中。

如果您想在应用程序之外处理哈希,则更方便地存储Base64字符串,就像您现在所做的一样。Base64大约会增加33%的固定开销,因此您可以预期字符串始终为88个字符。

话虽如此,ASP.NET内置了一个相当全面的身份验证系统(fairly comprehensive authentication system),您应该使用它。


在.NET中的字节数组直接映射到T-SQL中的BINARY(或VARBINARY)。 - RickNZ
2
感谢@Vinko的所有澄清 - 我喜欢拥有安全模型并确切地了解数据流向,知道我可以随时将密码的可用性从ASP.NET移植出来 - 我以前曾经受过伤。也许有些误导,但肯定不是因为我控制狂 ;) - Chris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接