Проверка хешированного пароля - PullRequest
0 голосов
/ 17 февраля 2020

Добрый день, ребята,

У меня есть проблема. Мне удалось создать учетные записи пользователей с полями user_ID, Username и Password.

Пароль хеширован и засолен, и он работает нормально. Теперь я хочу создать форму входа в систему, где пользователю необходимо пройти аутентификацию с использованием имени пользователя и пароля.

Я хочу проверить, правильно ли указан пароль и имя пользователя. Этот пароль должен быть сначала ha sh, а затем сравнить с тем, что находится в базе данных.

Ниже приведен мой код, но он продолжает выдавать ошибку неверного пароля.

try
        {

            string connString = CommonVariables.ConnectionString;
            // Hashing the password field first for it to be 



            string sql = "SELECT * FROM tbl_Users WHERE (Username = @Username) ";
            using (SqlConnection cnn = new SqlConnection(connString))
            {
                cnn.Open();
                using (SqlCommand cmd = new SqlCommand(sql, cnn))
                {
                    //cmd.Parameters.AddWithValue("@Password", SqlDbType.NVarChar).Value = txt_Password.Text.Trim();
                    cmd.Parameters.AddWithValue("@Username", SqlDbType.NVarChar).Value = txt_Username.Text.Trim();





                    SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                    if (reader.HasRows)
                    {

                        while (reader.Read())
                        {
                            //  string vsibility = reader["Visibility"].ToString(); //Getting the  value of the visibility to determine if the user can logon or not
                            // string user_role = reader["User_Role"].ToString(); // Getting the User_role of the person login on
                            string mypassword = reader["password"].ToString();
                            var hash = PasswordHashing.SecurePasswordHasher.Hash(mypassword);
                            var hashverify = PasswordHashing.SecurePasswordHasher.Verify(txt_Password.Text.Trim(), hash);

                            if (hashverify == true)
                            {
                                this.Hide();
                                new Mainmenu().Show(); ;

                            }
                            else
                            {
                                MessageBox.Show("incorrect password" + mypassword);
                            }
                        }





                    }
                    else
                    {
                        MessageBox.Show("Invalid Username, Please Confirm", "Login Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        txt_Username.Focus();
                        return;

                    }

                }
            }
        }
        catch (Exception c)
        {
            MessageBox.Show(c.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            return;
        }

1 Ответ

1 голос
/ 17 февраля 2020

Предполагая, что вы храните пароль sh в базе данных, похоже, что вы его дважды хешируете. В частности, строка

var hash = PasswordHashing.SecurePasswordHasher.Hash(mypassword);

, по-видимому, вычисляет га sh уже хешированного пароля. Изменение этого значения на var hash = mypassword; может помочь при сравнении паролей.

...