Как сравнить зашифрованный пароль в базе данных с вновь введенным паролем при входе в систему VB.NET-что?
Я делаю форму регистрации и входа в систему, где я уже зашифровал пароль, когда пользователь ввел пароль на этапе регистрации. Поэтому для входа в систему я знаю, что мне нужно сравнить зашифрованный пароль в базе данных с вновь введенным зашифрованным паролем во время входа в систему. Я не знаю, пропущу ли я какой-то код или напишу неправильный код. Я знаю, что этот вопрос задавался несколько раз, но я надеюсь, что смогу получить здесь некоторую помощь.
Вот код для кнопки входа в систему
Private Sub SubmitButton4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SubmitButton4.Click 'Check if username or password is empty 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
Что я уже пробовал:
Я уже нашел решение https://stackoverflow.com/questions/29032706/c-sharp-encrypted-login и попробуйте следовать коду, но все равно у него есть ошибка.
Richard Deeming
"Шифрование" подразумевает, что вы можете восстановить исходный текст. Как таковой, он не принадлежит нигде рядом с системой аутентификации.
Вам нужно использовать безопасный односторонний хэш с уникальной солью для каждой записи и предпочтительно использовать несколько проходов функции вывода ключа, такой как PBKDF2.
Безопасная Аутентификация Паролем Объясняется Просто[^]
Соленое хэширование паролей - делаем это правильно[^]