我继承了一个我需要支持的程序,并被告知密码是使用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获得有关如何执行此操作的答案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句