Как сравнить зашифрованный пароль в базе данных с вновь введенным паролем при входе в систему? - PullRequest
0 голосов
/ 25 мая 2019

Я делаю регистрацию и форму входа, где я уже зашифровал пароль, когда пользователь вводил пароль в фазе регистрации. Поэтому для входа в систему я знаю, что мне нужно сравнить зашифрованный пароль в базе данных с вновь введенным зашифрованным паролем во время входа в систему. Я не знаю, если я пропускаю какой-то код или я пишу неправильный код. Я знаю, что этот вопрос задавался несколько раз, но я надеюсь, что смогу получить некоторую помощь здесь. Ошибка, которую я получаю, это просто сообщение, где не удалось подключиться к базе данных

Я уже нашел решение C # Зашифрованный логин и пытаюсь следовать коду, но все равно, есть ошибка.

           If PasswordTextBox1.Text = "" Or UsernameTextBox2.Text = "" Then
        MessageBox.Show("Please fill-up all fields!", "Authentication Error", MessageBoxButtons.OK, MessageBoxIcon.Error)

        'Clear all fields
        PasswordTextBox1.Text = ""
        UsernameTextBox2.Text = ""

        'Focus on Username field
        UsernameTextBox2.Focus()

    Else
        'Connect to DB
        Dim conn As New System.Data.OleDb.OleDbConnection()
        conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + "C:\Users\user1\Documents\Visual Studio 2010\Projects\Crypto\Crypto\crypto.accdb"

        Try
            'Open Database Connection
            conn.Open()

            Dim sql As String = "SELECT Password FROM registration WHERE Username='" & Encrypt(UsernameTextBox2.Text) & "'"

            Dim cmd As OleDbCommand = New OleDbCommand(sql, conn)
            Dim sqlRead As OleDbDataReader = cmd.ExecuteReader()
            Dim password As String = cmd.ExecuteScalar().ToString().Replace("", "")

            If (password = Encrypt(PasswordTextBox1.Text)) Then

                PasswordTextBox1.Clear()
                UsernameTextBox2.Clear()

                'Focus on Username field
                UsernameTextBox2.Focus()
                Me.Hide()
                Mainpage.Show()
            Else
                LoginAttempts = LoginAttempts + 1
                If LoginAttempts >= 3 Then
                    End
                Else
                    ' If user enter wrong username or password
                    MessageBox.Show("Sorry, wrong username or password", "Authentication Failure", MessageBoxButtons.OK, MessageBoxIcon.Error)

                    'Clear all fields
                    PasswordTextBox1.Text = ""
                    UsernameTextBox2.Text = ""

                    'Focus on Username field
                    UsernameTextBox2.Focus()
                End If
            End If
        Catch ex As Exception
            MessageBox.Show("Failed to connect to Database", "Database Connection Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
            'Clear all fields
            PasswordTextBox1.Text = ""
            UsernameTextBox2.Text = ""
        End Try
    End If

End Sub

Я ожидаю, что зашифрованный пароль в базе данных можно сопоставить с вновь введенным паролем, чтобы пользователь мог войти в систему.

1 Ответ

2 голосов
/ 25 мая 2019

Вот что обычно происходит. Когда пользователь регистрируется, вы получаете его, чтобы предоставить имя пользователя и пароль, а также подтверждение пароля. Идея подтверждения заключается в том, что пароль обычно маскируется, и вы хотите убедиться, что они не заблокируют себя из своей учетной записи, сохранив опечатку. Затем вы хэшируете пароль, предоставленный salt, и сохраняете имя пользователя вместе с salt и hash. Когда пользователь входит в систему, вы получаете соль для этого пользователя и хешируете предоставленный пароль, а затем сравниваете его с хэшем, хранящимся в базе данных. Если хэши совпадают, пользователь успешно аутентифицирован.

Хеширование считается предпочтительнее шифрования, потому что оно одностороннее, поэтому никто не может взломать пароль из хэша, кроме как методом подбора. Соль обеспечивает дополнительную безопасность, потому что два пользователя с одинаковым паролем все равно не будут иметь одинаковый хэш. Это означает, что, если пользователь забывает свой пароль, система не может отправить ему существующий пароль, потому что она не знает, что это такое. В этом случае пользователь должен создать новый пароль. Если вы используете функцию забытого пароля на веб-сайте и т. П., И они сообщают вам, какой у вас текущий пароль, они используют более низкую защиту. Если они заставляют вас создать новый пароль, то они почти наверняка используют хеширование.

В интернете много информации о хешировании и посоле. Стоит также отметить, что в ASP.NET Identity (которую можно использовать вне приложений ASP.NET, если хотите) встроено хеширование паролей.

...