繁体   English   中英

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

[英]vb.net, how do I validate a SHA1 hashed password?

我继承了一个我需要支持的程序,并被告知密码是使用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 []”进行些什么才能使其变成我可以阅读的内容?

谢谢。

您可以使用您的函数创建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获得有关如何执行此操作的答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM