在SQL Server VB.NET中登录表单的哈希密码

时间:2017-02-08 20:22:57

标签: 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().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()

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

1 个答案:

答案 0 :(得分:1)

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

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

它应该是:

...AND Password=@Password