我正在申请学校,在将密码插入我的用户数据库时,我需要帮助加密密码。我使用c#编程语言进行编程,我正在使用c#编程语言进行编程。使用MS server 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。''和simmilar。
答案 0 :(得分:1)
要散列一串文字,你可以使用像这样的函数
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())
.....
请记住,散列不可逆,因此您无法从散列文本中检索原始密码。您将哈希函数应用于您的文本并将其存储为base64字符串。如果您的用户忘记了密码,则需要将其重置为已知值。没有办法告诉他原始密码。
顺便说一下,为什么在检查中你不像插入代码那样使用参数?永远不要使用字符串连接来构建SQL查询。即使你急着完成这份工作