在C#中从MySQL数据库验证SHA256哈希

托比·库克(Toby Cook)

我创建了一个使用远程MySQL数据库设置的程序。数据库存储该程序的登录信息,并使用SHA256对密码进行哈希处理。如果用户在登录表单中输入正确的信息,则他们将进入GUI。

我的问题是验证事物用户端的哈希。我怎么会这样呢?我读过的大多数教程都过分解释,让我感到困惑。

这是我的登录按钮的代码。

        try
        {
            string strConnect = "Server=***;Port=***;Database=***;Uid=***;Pwd=***;";
            MySqlConnection myConn = new MySqlConnection(strConnect);
            MySqlCommand selectCmd = new MySqlCommand("select * from ***.*** where username='" + txtUsername.Text + "' and password='" + txtPassword.Text + "' ;", myConn);
            MySqlDataReader myReader;
            myConn.Open();
            int count = 0;
            myReader = selectCmd.ExecuteReader();
            while (myReader.Read())
            {
                count = count + 1;
            }
            if (count == 1)
            {
                this.Close(); form2.Show();
            }
            else if (count > 1)
            {
                MessageBox.Show("Theres 2 Users with that username Please contact administrator ...Access Denied");
            }
            else
                MessageBox.Show("Username or Password is Not correct .. Please try Again!");

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
itsme86

您只需要使用与存储密码时相同的方式对用户键入的内容进行哈希处理即可。然后,如果数据库中的哈希密码与用户刚刚键入的哈希密码匹配,则他们输入了正确的密码。

通常情况下会涉及一些随机因素,因此,如果多个人使用密码“ password”,则散列密码在数据库中看起来将不会相同。这与您当前的问题无关,但是在您认为“存储密码”解决方案完整之前,一定要先进行研究。

这是您可能会使用的一些代码的示例:

byte[] passwordBytes = Encoding.Unicode.GetBytes(userTypedPassword);
//
// This is where you'd normally append or prepend the salt bytes
//
var hasher = System.Security.CryptographySHA256.Create();
byte[] hashedBytes = hasher.ComputeHash(passwordBytes);

现在,它取决于哈希在数据库中的存储方式,如果它只是二进制数据,则可以比较字节数组。如果将其存储为base64字符串,则可以转换字节:

var hashedString = Convert.ToBase64String(hashedBytes);

...然后在存储的字符串和之间进行字符串比较hashedString

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章