Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server VB.NET中登录表单的哈希密码_Sql Server_Vb.net_Winforms_Hashcode - Fatal编程技术网

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

Sql 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

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

然而,我的问题是,即使用户输入了正确的登录详细信息,下一个表单也不会显示。如何解决这一问题

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

从Username=@Username和@Password=@Password的用户中选择COUNT*

应该是:


…和Password=@Password

MDF?我猜你指的是MD5。SHA不是散列passowrds的方法。我建议您使用BCrypt,它的使用非常简单。其余部分是调试问题,但@Password将始终等于@Password仅使用哈希函数是不够的,仅添加一个salt对提高安全性几乎没有作用。相反,使用随机盐在HMAC上迭代大约100ms,并使用散列保存盐。使用PBKDF2 aka Rfc2898DeriveBytes、password_hash/password_verify、Bcrypt等函数和类似函数。关键是让攻击者花费大量时间通过暴力手段查找密码。保护您的用户很重要,请使用安全的密码方法。为什么要调用cmd.ExecuteScalar两次?我制作了一个关于加密数据库和从vb访问数据库的视频