我刚刚在函数中添加了哈希和salt密码,这些密码存储在Access数据库“Memo”字段中。
散列/腌制工作正常,但我在互联网上找不到任何告诉我如何解密它们的内容。
我确实看到某个地方说你不能,但是必须从数据库中获取密码,然后对输入的密码进行哈希(对于登录屏幕)并比较2个字符串。我试过这个,但是2个字符串是不同的,所以我无法登录。
创建哈希/盐的算法是
jQuery('.f-checkbox label').on('click', function(e){
if (jQuery(this).sibling('input').prop('checked')) {
jQuery(this).parent('.f-checkbox').addClass('active');
} else {
jQuery(this).parent('.f-checkbox').removeClass('active');
}
console.log('Test');
})
然后,登录时,我正在尝试以下
Public Shared Function createRandomSalt() As String
Dim mix As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!£$%^&*()-_=+{}][@'~#:;?/>.<,\|"
Dim salt As String = ""
Dim rnd As New Random
Dim sb As New StringBuilder
For i As Integer = 1 To 50
Dim x As Integer = rnd.Next(0, mix.Length - 1)
salt &= (mix.Substring(x, 1))
Next
Return salt
End Function
Public Shared Function Hash512(ByVal password As String, ByVal salt As String)
Dim convertedToBytes As Byte() = Encoding.UTF8.GetBytes(password & salt)
Dim hashType As HashAlgorithm = New SHA512Managed()
Dim hashBytes As Byte() = hashType.ComputeHash(convertedToBytes)
Dim hashedResult As String = Convert.ToBase64String(hashBytes)
Return hashedResult
End Function
我做错了吗?如何将输入的密码与数据库中的加密密码进行比较?
答案 0 :(得分:4)
问题是您在对输入的密码进行散列时使用随机盐。由于这与您在将哈希值存储到数据库时使用的随机盐不同,因此会得到不同的哈希值。
您必须执行以下操作:
哦,你似乎永远不会使用用户输入的密码。在您的代码中,您将数据库中的哈希值检索到password
,将哈希值再次哈希到checkpassword
并进行比较。当然你必须哈希输入的密码。