插入数据库时对密码进行哈希加密

本文关键字:哈希加密 密码 数据库 插入 | 更新日期: 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查询。即使你急于完成工作