我继承了一个我需要支持的程序,并且我被告知使用SHA1哈希将密码存储在MSSQL数据库中。当我尝试从数据库中读取数据时,我得到的是“System.Byte []”。
程序要求用户输入密码,我可以使用以下命令创建SHA1哈希:
Public Function GetSHA1HashData(data As String) As String
Dim cBase64 As String
Dim objSHA1 As New SHA1CryptoServiceProvider()
Dim abBytesToHash() As Byte
Dim cHash As String
cBase64 = Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(data))
abBytesToHash = System.Text.Encoding.ASCII.GetBytes(cBase64)
cHash = BitConverter.ToString(objSHA1.ComputeHash(abBytesToHash))
cHash = Replace(cHash, "-", "")
Return cHash
End Function
所以我的问题是,如何将新创建的哈希值与我从数据库中提取的值进行比较,看看它们是否相同?我需要做什么才能将“System.Byte []”变成我能读到的东西?
感谢。
答案 0 :(得分:1)
您可以使用您的函数创建SHA-1哈希,但是如果使用这些值填充数据库的人确实使用了相同的函数,则会有疑问。目前,您对数据进行了64位编码,该数据已经是一个字符串,仅用于检索字符编码。这个人更有可能直接得到字符编码 - 我在这里猜测 UTF-8 - 并计算出SHA-1值。
Public Function GetSHA1HashData(data As String) As Byte()
Dim objSHA1 As New SHA1CryptoServiceProvider()
return objSHA1.ComputeHash(System.Text.Encoding.UTF8.GetBytes(data));
End Function
好的,现在你将拥有一个来自数据库的字节数组,一个来自用户密码。您可以直接比较这些字节数组。幸运的是,您可以依赖StackOverflow和Jon Skeet已经拥有an answer on how to do this。