[英]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.