c#winforms查询MySQL数据库中的哈希密码

时间:2019-04-06 13:11:56

标签: c# mysql winforms

您好,我有一个问题,我的网站有登录和注册页面。它运作良好,并将凭据正确存储在我的数据库中。 (https://imgur.com/uuBvhQP)现在,我需要能够从c#登录表单中验证电子邮件和密码,但是问题是密码被散列了,我不知道该如何处理表单。 我从未在程序中使用过哈希密码,因此到目前为止,它的工作方式是我的winform将从@email和@pass中获取值并将其与未哈希密码的db进行比较。

private void db_connection()
    {
        try
        {
            conn = "my conn string";
            connect = new MySqlConnection(conn);
            connect.Open();
        }
        catch (MySqlException e)
        {
            throw;
        }
    }
    private bool validate_login(string email, string pass)
    {
        db_connection();
        MySqlCommand cmd = new MySqlCommand();
        cmd.CommandText = "Select email, password from users where email=@user and password=@pass";
        cmd.Parameters.AddWithValue("@email", user); 
        cmd.Parameters.AddWithValue("@pass", pass);
        cmd.Connection = connect;
        MySqlDataReader login = cmd.ExecuteReader();
        if (login.Read())
        {
            connect.Close();
            return true;
        }
        else
        {
            connect.Close();
            return false;
        }
    }

    private void button1_Click(object sender, EventArgs e)
    {
        string user = username.Text;
        string pass = password.Text;
        if (user == "" || pass == "")
        {
            MessageBox.Show("Empty Fields Detected ! Please fill up all the fields");
            return;
        }
        bool r = validate_login(user, pass);
        if (r)
            MessageBox.Show("Correct Login Credentials");
        else
            MessageBox.Show("Incorrect Login Credentials");
    }

1 个答案:

答案 0 :(得分:0)

正如其他人在评论中已经建议的那样,您使用相同的算法来哈希您已经在注册表中使用的用户输入。然后将哈希输入与数据库中的哈希数据进行比较。

请不要将密码以明文形式存储或使用弱算法进行哈希处理。许多用户总是使用相同的密码,如果有人可以访问您的数据库,这显然是一件非常糟糕的事情。