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