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

c#winforms在MySQL数据库中查询哈希密码,c#,mysql,winforms,C#,Mysql,Winforms,你好,我有一个问题,我有一个网站,其中有登录和注册页面。它运行良好,并在我的数据库中正确存储信誉。()现在我需要能够从我的c#登录表单中验证电子邮件和密码,但问题是密码是散列的,我不知道在我的表单中如何处理它。 我从来没有在我的程序中使用过散列密码,所以到目前为止,我的winform将从@email和@pass中获取值,并将其与未对密码进行散列的db进行比较 private void db_connection() { try {

你好,我有一个问题,我有一个网站,其中有登录和注册页面。它运行良好,并在我的数据库中正确存储信誉。()现在我需要能够从我的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");
    }

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


请不要将密码存储为明文或使用弱算法散列。许多用户总是使用相同的密码,如果有人访问您的数据库,这显然是一件非常糟糕的事情。

您应该散列用户输入(使用用于存储密码的相同散列算法),并将其与数据库中的散列密码进行比较。您可以要求输入密码,使用例程对其进行散列,然后检查用户名和散列在数据库中是否匹配。您需要实际搜索并找出C#必须比较和验证散列的函数。在普通登录中,您对密码进行加密和解密,并与登录进行比较和验证,您正在编写所需的所有逻辑,但哈希的工作方式不同。它使用一个算法来生成算法,只有通过函数向开发人员公开的算法才能生成、比较和验证哈希。因此,请阅读有关散列的内容,了解它与普通加密的区别,并了解c#对散列的作用。