vb.net,如何验证SHA1哈希密码?

时间:2013-08-23 12:46:54

标签: vb.net encryption sha1

我继承了一个我需要支持的程序,并且我被告知使用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 []”变成我能读到的东西?

感谢。

1 个答案:

答案 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