1

我继承了一个我需要支持的程序,并被告知密码使用 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 []”做什么才能把它变成我可以阅读的东西?

谢谢。

4

1 回答 1

1

您可以使用您的函数创建一个 SHA-1 散列,但是使用这些值填充数据库的人是否确实使用了相同的函数是值得怀疑的。目前,您正在对已经是字符串的数据进行 base 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 已经知道如何做到这一点

于 2013-08-24T19:38:49.400 回答