如何比较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
答案 0 :(得分:1)
首先,您必须将密码转换为用户输入的md5
。将密码从string
转换为md5 string
您可以简单地调用此查询
Select 1 from login_detail ld where ld.login_id = @yourloginId and ld.Password = @md5Password;
答案 1 :(得分:1)
MySQL具有md5功能。您可以执行以下操作,假设salt的字段称为 salt :
select 1 from login_detail where login_id = @yourloginId and Password = MD5(salt + @password);
重要强>
MD5不是存储密码的安全方法。即使腌制,MD5也是不安全的,可以很快被打破。您应该使用安全算法,如BCrypt,SCrypt或PBKDF2。这些算法非常适合密码存储,因为它们使用盐并且速度慢,使得生成彩虹表更加困难。
您可以通过在已有的哈希上执行上述算法之一来升级现有方案。
BCrypt(MD5(盐+密码))当用户登录时只需选择密码,然后在表中存储密码版本并将其设置为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