Sql server SQL Server VB.NET中登录表单的哈希密码
我在VB.NET中有一个登录表单,需要输入用户名和密码。如果用户输入与SQL Server DB中的正确登录详细信息匹配,则会显示另一个VB表单 密码需要散列,而不使用MD5Sql server SQL Server VB.NET中登录表单的哈希密码,sql-server,vb.net,winforms,hashcode,Sql Server,Vb.net,Winforms,Hashcode,我在VB.NET中有一个登录表单,需要输入用户名和密码。如果用户输入与SQL Server DB中的正确登录详细信息匹配,则会显示另一个VB表单 密码需要散列,而不使用MD5 Dim Bytes() As Byte = System.Text.Encoding.UTF8.GetBytes(txtPassword.Text) Dim HashofBytes() As Byte = New System.Security.Cryptography.SHA1Managed().Comp
Dim Bytes() As Byte = System.Text.Encoding.UTF8.GetBytes(txtPassword.Text)
Dim HashofBytes() As Byte = New System.Security.Cryptography.SHA1Managed().ComputeHash(bytes)
Dim StrHash As String = Convert.ToBase64String(HashofBytes)
Using con As New SqlConnection("Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=""G:\Program\X\Database1.mdf"";Integrated Security=True")
con.Open()
Dim query As String = "SELECT COUNT(*) FROM Users WHERE Username=@Username AND Password=@Password"
Dim cmd As New SqlCommand(query, con)
cmd.Parameters.Add(New SqlParameter("@Username", txtUsername.Text))
cmd.Parameters.Add(New SqlParameter("@Password", StrHash))
Try
If cmd.ExecuteScalar() = 1 Then
frmOverview.ShowDialog()
Me.Hide()
Else
MsgBox("You have entered an invalid username or password")
End If
Catch ex As SqlException
MsgBox(ex.Message.ToString())
End Try
End Using
txtPassword.Clear()
然而,我的问题是,即使用户输入了正确的登录详细信息,下一个表单也不会显示。如何解决这一问题 正如@plutinix所说,检查您的密码where子句: 从Username=@Username和@Password=@Password的用户中选择COUNT* 应该是:
…和Password=@PasswordMDF?我猜你指的是MD5。SHA不是散列passowrds的方法。我建议您使用BCrypt,它的使用非常简单。其余部分是调试问题,但@Password将始终等于@Password仅使用哈希函数是不够的,仅添加一个salt对提高安全性几乎没有作用。相反,使用随机盐在HMAC上迭代大约100ms,并使用散列保存盐。使用PBKDF2 aka Rfc2898DeriveBytes、password_hash/password_verify、Bcrypt等函数和类似函数。关键是让攻击者花费大量时间通过暴力手段查找密码。保护您的用户很重要,请使用安全的密码方法。为什么要调用cmd.ExecuteScalar两次?我制作了一个关于加密数据库和从vb访问数据库的视频