SQL 服务器 VB.NET 中登录表单的哈希密码

Hashing Passwords for login form in SQL Server VB.NET

我在 VB.NET 中有一个登录表单,需要输入用户名和密码。如果用户输入与 SQL 服务器数据库中的正确登录详细信息相匹配,则会显示另一个 VB 表单。

密码需要散列,不使用 MD5。

    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()

但是,我遇到的问题是,即使用户输入了正确的登录详细信息,也不会显示下一个表单。这怎么能解决?

正如@Plutonix 所说,检查您的密码 where 子句:

SELECT COUNT(*) FROM Users WHERE Username=@Username AND @Password=@Password

应该是:

...AND Password=@Password