使用哈希密码登录c#

问题描述 投票:0回答:2

如果我有这样的代码,我是否能够使用在数据库中散列的密码登录:

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个结果。但是如果在数据库中对密码进行哈希处理会发生什么。

c# sql hash
2个回答
1
投票

出于安全原因,密码[正确地]存储为哈希;但是一旦哈希,它就会被存储为string,并且可以直接与那个确切的字符串相媲美。您的代码目前要求您使用散列密码字符串作为密码 - 不是理想的情况......

需要做的是中间步骤:

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

其中string Hash(string password)是一个函数,它将使用创建帐户时使用的相同散列算法(以及存储在数据库中的密码)来散列密码。


0
投票

为了能够使用哈希密码登录,您需要使用与之前存储在数据库中的密码相同的算法来散列从Password TextBox收到的密码,然后将其传递给sql查询。

string hasedPassword = Hash(PasswordTextBox.Text);  // TODO: Make a Hash() function
command.Parameters.AddWithValue("@geslo", hasedPassword );
© www.soinside.com 2019 - 2024. All rights reserved.