Войти с хешированным паролем c # - PullRequest
0 голосов
/ 16 февраля 2019

Смогу ли я войти в систему с паролем, который хэшируется в базе данных, если у меня есть такой код:

string queryLog = "SELECT username, password FROM users WHERE username = @username and password = @password";
                using (SqlCommand command = new SqlCommand(queryLog, con))
                {
                    command.Parameters.AddWithValue("@username", LoginUsername_txt.Text);
                    command.Parameters.AddWithValue("@password", LoginPassword_txt.Text);

                    con.Open();
                    SqlDataAdapter adpt = new SqlDataAdapter(command);
                    DataSet dts = new DataSet();
                    adpt.Fill(dts);
                    con.Close();

                    if (dts.Tables[0].Rows.Count >= 1)
                    {
                        passingText = LoginUsername_txt.Text;
                        this.Hide();
                        Work_Orders d = new Work_Orders();
                        d.ShowDialog();
                    }
                    else MessageBox.Show("Invalid username or password!", "Error signing in!");
                }

Как вы видите, я проверяю, получаю ли я хотя бы 1 результат отбаза данных.Но что произойдет, если пароль будет хеширован в базе данных.

Ответы [ 2 ]

0 голосов
/ 16 февраля 2019

Чтобы войти в систему с помощью хэшированного пароля, вам нужно хэшировать пароль, полученный от Password TextBox, используя тот же алгоритм, который вы использовали для хэширования пароля, хранящегося в базе данных ранее, а затем передать его в запрос sql..

string hasedPassword = Hash(PasswordTextBox.Text);  // TODO: Make a Hash() function
command.Parameters.AddWithValue("@geslo", hasedPassword );
0 голосов
/ 16 февраля 2019

Пароль [правильно] хранится в виде хэша по соображениям безопасности;но после хеширования он сохраняется как string и сопоставим напрямую с этой точной строкой.Ваш код в настоящее время требует, чтобы вы использовали хешированную строку пароля в качестве пароля - не идеальный сценарий ...

Что должно произойти, это промежуточный шаг:

command.Parameters.AddWithValue("@password", Hash(LoginPassword_txt.Text));

Где string Hash(string password) - это функция, которая будет хэшировать пароль, используя тот же алгоритм хэширования, который использовался во время создания учетной записи (и пароль хранился в базе данных).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...