用户无法使用密码在MySQL DB中登录为MD5

时间:2016-01-19 23:44:18

标签: mysql vb.net hash

我有两个表单,一个注册表单和一个登录表单,我的注册表单使用MD5将用户输入的密码存储到数据库中,但是当我使用相同的用户和密码登录时,它无法登录,我相信它可能是将我的明文密码与我的哈希密码进行比较,因此抛出了错误的信息。这是我的注册表单代码:

Imports MySql.Data.MySqlClient
Imports System.Security.Cryptography
Imports System.Text


Public Class frmSignup
Dim ServerString As String = "Server=localhost;User Id=root;Password=;Database=accountinfo"
Dim SQLConnection As MySqlConnection = New MySqlConnection

Private Sub Form3_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    SQLConnection.ConnectionString = ServerString

    Try
        If SQLConnection.State = ConnectionState.Closed Then
            SQLConnection.Open()
            MsgBox("Successfully connected to DB")

        Else
            SQLConnection.Close()
            MsgBox("Failed to connect to DB")
        End If
    Catch ex As Exception
        MsgBox(ex.ToString)

    End Try
End Sub

Public Sub SaveAccountInformation(ByRef SQLStatement As String)
    Dim cmd As MySqlCommand = New MySqlCommand

    With cmd
        .CommandText = SQLStatement
        .CommandType = CommandType.Text
        .Connection = SQLConnection
        .ExecuteNonQuery()
    End With
    SQLConnection.Close()
    SQLConnection.Dispose()
End Sub

Private Sub btnSignup_Click(sender As Object, e As EventArgs) Handles btnSignup.Click
    If txtPasswd.Text = txtPasswd2.Text Then
        MessageBox.Show("Passwords Match!")

        Dim HashedPass As String = ""

        'Converts the Password into bytes, computes the hash of those bytes, and then converts them into a Base64 string

        Using MD5hash As MD5 = MD5.Create()

            HashedPass = System.Convert.ToBase64String(MD5hash.ComputeHash(System.Text.Encoding.ASCII.GetBytes(txtPasswd.Text)))

        End Using


        Dim SQLStatement As String = "INSERT INTO accountinfodb(`Usernames`, `Passwords`) VALUES ('" & txtUsername.Text & "','" & HashedPass & "')"
        SaveAccountInformation(SQLStatement)



        MessageBox.Show("Account Successfully Registered")
        frmLogin.Show()
        frmLoginScreen.Hide()
    Else
        MessageBox.Show("Passwords Do Not Match!")
        txtPasswd.Text = Focus()
        txtPasswd.Clear()
        txtPasswd2.Text = Focus()
        txtPasswd2.Clear()

    End If
End Sub

这是我的登录表格

导入MySql.Data.MySqlClient Imports System.Security.Cryptography

Public Class frmLogin

Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click
    Dim conStr = "Server=localhost;User Id=root;Password=;Database=accountinfo"
    Dim SQL = "SELECT * FROM accountinfodb WHERE Usernames = @uname AND `Passwords` = MD5(@pword);"

    Dim HashedPass As String = ""

    'Converts the Password into bytes, computes the hash of those bytes, and then converts them into a Base64 string

    Using MD5hash As MD5 = MD5.Create()

        HashedPass = System.Convert.ToBase64String(MD5hash.ComputeHash(System.Text.Encoding.ASCII.GetBytes(txtPasswd.Text)))

    End Using

    ' this object will be closed and dispose @ End Using
    Using dbCon As New MySqlConnection(conStr)
        ' the command object likewise
        Using cmd As New MySqlCommand(SQL, dbCon)

            dbCon.Open()
            cmd.Parameters.Add(New MySqlParameter("@uname", txtUsername.Text))
            cmd.Parameters.Add(New MySqlParameter("@pword", HashedPass))

            ' create a Using scope block for the reader
            Using rdr As MySqlDataReader = cmd.ExecuteReader

                If rdr.HasRows Then
                    MessageBox.Show("Login successful!", "Welcome")
                    frmProduct.Show()
                Else
                    MessageBox.Show("Oops! Login unsuccessful!(Password/Username may be wrong, or the user may not exist!")
                    txtUsername.Clear()
                    txtUsername.Focus()
                    txtPasswd.Clear()
                End If
            End Using
        End Using           ' close/dispose command

    End Using               ' close/dispose connection


End Sub

用于清理数据库中参数的Plutonix

Imports MySql.Data.MySqlClient
Imports System.Security.Cryptography
Imports System.Text


Public Class frmSignup
Dim ServerString As String = "Server=localhost;User Id=root;Password=;Database=accountinfo"
Dim SQLConnection As MySqlConnection = New MySqlConnection
Dim HashedPass As String = ""


Private Sub Form3_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    SQLConnection.ConnectionString = ServerString

    Try
        If SQLConnection.State = ConnectionState.Closed Then
            SQLConnection.Open()
            MsgBox("Successfully connected to DB")

        Else
            SQLConnection.Close()
            MsgBox("Failed to connect to DB")
        End If
    Catch ex As Exception
        MsgBox(ex.ToString)

    End Try
End Sub

Public Sub SaveAccountInformation(ByRef SQLStatement As String)
    Dim cmd As MySqlCommand = New MySqlCommand

    With cmd
        .CommandText = SQLStatement
        .CommandType = CommandType.Text
        .Connection = SQLConnection
        cmd.Parameters.Add(New MySqlParameter("@uname", txtUsername.Text))
        cmd.Parameters.Add(New MySqlParameter("@pword", HashedPass))
        .ExecuteNonQuery()
    End With
    SQLConnection.Close()
    SQLConnection.Dispose()
End Sub

Private Sub btnSignup_Click(sender As Object, e As EventArgs) Handles btnSignup.Click
    If txtPasswd.Text = txtPasswd2.Text Then
        MessageBox.Show("Passwords Match!")


        'Converts the Password into bytes, computes the hash of those bytes, and then converts them into a Base64 string

        Using MD5hash As MD5 = MD5.Create()

            HashedPass = System.Convert.ToBase64String(MD5hash.ComputeHash(System.Text.Encoding.ASCII.GetBytes(txtPasswd.Text)))

        End Using


        Dim SQLStatement As String = "INSERT INTO accountinfodb WHERE Usernames = @Usernames AND `Password`s = @Passwords"


        SaveAccountInformation(SQLStatement)



        MessageBox.Show("Account Successfully Registered")
        frmLogin.Show()
        frmLoginScreen.Hide()
    Else
        MessageBox.Show("Passwords Do Not Match!")
        txtPasswd.Text = Focus()
        txtPasswd.Clear()
        txtPasswd2.Text = Focus()
        txtPasswd2.Clear()

    End If
End Sub
End Class

0 个答案:

没有答案