繁体   English   中英

如何将密码与加盐的哈希密码进行比较

[英]how to compare password with salted hashed password

我有一个具有两个字段用户名varchar()和密码的mysql表用户,盐腌md5哈希哈希28字节/“ 128位”-带文本框1“用户”和文本框2“密码”的asp.net Web表单

我如何比较用户在textbox2中输入的密码与用户表中用于验证的密码相同

这是我的简单身份验证功能,我需要更改代码以将密码与哈希1进行比较

Public Function Authenticate(ByVal id As String, ByVal pas As String) As Integer

    Dim strConnectionString As String = ("Data Source=localhost;port=3306;Database=transfer;User ID=root;Password=password;Convert Zero Datetime=True")
    Dim instsqlconnection As MySqlConnection = New MySqlConnection(strConnectionString)

    instsqlconnection.Open()

    Dim daAuthors As New MySqlDataAdapter("Select * From login_detail", instsqlconnection)
    dsPubs = New DataSet("Employee")
    daAuthors.Fill(dsPubs, "login")
    instsqlconnection.Close()


    Dim drResult As DataRow() = dsPubs.Tables("login").Select(" login_id = '" + id.ToString() + "'")

    If (drResult.Length > 0) Then
        If drResult(0)("password").ToString().Trim() = pas Then

            Return 1
        Else
            Return 2
        End If

    Else
        Return 0
    End If

End Function

首先,您必须将密码转换为由用户输入的md5 将密码从string转换为md5 string

您可以简单地调用此查询

Select 1 from login_detail ld where ld.login_id = @yourloginId and ld.Password = @md5Password;

MySQL具有md5函数。 您可以假设“盐”字段称为“ 盐”来执行以下操作:

select 1 from login_detail where login_id = @yourloginId and Password = MD5(salt + @password);

重要

MD5不是用于存储密码的安全方法。 即使加盐,MD5也是不安全的,并且可以很快被破坏。 您应该使用安全算法,例如BCrypt,SCrypt或PBKDF2。 这些算法使用盐并且速度慢,因此非常适合用于密码存储,这使得彩虹表的生成更加困难。

您可以通过对现有哈希执行上述算法之一来升级现有方案。

BCrypt(MD5(salt + password))用户登录时,只需选择密码,然后将密码版本存储在表中并将其设置为1。

SELECT * FROM login_detail WHERE login_id = @username

hashed = drResult(0)("password")
version = drResult(0)("version")
salt = drResult(0)("salt")

if(version = 1) then
   password = MD5(salt + password)
end if

if(Bcrypt.Verify(password,hashed))
   if(version = 1) then
        Update password = BCrypt(password), version = 2 WHERE login_id = @username
   end if

   return true
End If

return false

暂无
暂无

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

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