插入数据库时对密码进行哈希加密
本文关键字:哈希加密 密码 数据库 插入 | 更新日期: 2023-09-27 18:16:59
我正在做一个学校的应用程序,我需要帮助加密密码时,将它们插入到我的用户数据库。我在c#编程语言编程,我使用MS服务器2008 R2操纵我的数据库。我正在考虑做HASH加密,如果有人帮助我,我会很高兴。
这是我的代码插入数据到数据库:
using (SqlConnection con = new SqlConnection("Data Source=HRC0;Initial Catalog=users;Integrated Security=True")) //MLHIDE
using (SqlCommand sc = new SqlCommand("if NOT exists (select * from users where UserName = @username) insert into users (userName, password) values(@userName, @password)", con))
{
con.Open();
sc.Parameters.AddWithValue("@username", korisnik.Text);
sc.Parameters.AddWithValue("@password", pass.Text);
int o = sc.ExecuteNonQuery();
if (o == -1)
{
MessageBox.Show(Ulaz.Properties.Resources.Niste_ubačeni_u_bazi_korisničk);
this.Hide();
new Registracija().Show();
}
else
{
MessageBox.Show(Ulaz.Properties.Resources.Ubačeni_ste_u_bazi);
con.Close();
this.Hide();
new Form1().Show();
}
,这里是我的代码登录检查:
SqlConnection con = new SqlConnection("Data Source=HRC0;Initial Catalog=users;Integrated Security=True");
SqlCommand cmd = new SqlCommand("select * from users where userName='" + user.Text + "' and password='" + pass.Text + "'", con); //MLHIDE
con.Open();
SqlDataReader re = cmd.ExecuteReader();
if (re.Read())
{
ImeUsera = user.Text;
new UserMode().Show();
this.Hide();
}
else
{
this.Hide();
new LoginFail().Show();
}
}
我使用了一些多语言附加组件,所以他将我的字符串转换为"Ulaz.Properties.Resources"。
要散列文本字符串,可以使用如下函数
private string GetHashedText(string inputData)
{
byte[] tmpSource;
byte[] tmpData;
tmpSource = ASCIIEncoding.ASCII.GetBytes(inputData);
tmpData = new MD5CryptoServiceProvider().ComputeHash(tmpSource);
return Convert.ToBase64String(tmpData);
}
并应用于您的用户输入。然后将结果存储在数据库中。在登录时,对输入的密码重新应用哈希函数,并根据存储的值检查结果。
在插入代码中写入
sc.Parameters.AddWithValue("@password", GetHashedText(pass.Text));
和在你的支票
....
SqlCommand cmd = new SqlCommand("select * from users where userName=@user and password=@pass", con);
con.Open();
cmd.Parameters.AddWithValue("@user",user.Text);
cmd.Parameters.AddWithValue("@pass", GetHashedText(pass.Text));
SqlDataReader re = cmd.ExecuteReader();
if (re.Read())
.....
请记住,散列是不可逆转的,因此您无法从散列文本中检索原始密码。将Hash函数应用于文本并将其存储为base64字符串。如果您的用户忘记了密码,您需要将其重置为已知值。没有办法告诉他原始密码。
顺便问一下,为什么在检查中不像在插入代码中那样使用参数呢?永远不要使用字符串连接来构建sql查询。即使你急于完成工作