c# wpf Sql表,加密密码



当用户可以通过输入他们的信息登录程序时,我正在使用一个应用程序。密码以加密方式存储在表中。但是当我尝试使用这个密码登录时,它不起作用。

对于加密数据,我使用这个存储过程
   ALTER procedure [dbo].[inn]
   @use varchar (50) = null,
   @ins varchar (50) = null
 AS

   INSERT INTO [kole].[dbo].[koll]
       ([Userr]
      ,[ins])

 VALUES
        (@use,
       ((EncryptByPassPhrase('8', @ins)))
对于解密,我使用这个存储过程
  ALTER procedure [dbo].[sle]
 @Use varchar (50) = null,
 @ins varchar (50) = null
 AS
 SELECT Userr,CONVERT(varchar(50),DECRYPTBYPASSPHRASE ('8',ins)) as Password
FROM [kole].[dbo].[koll]
 where Userr = @Use and ins = @ins
   GO 

在c#中,我使用这段代码来调用数据,并登录到程序中。

              private void btn_Click(object sender, RoutedEventArgs e)
    {
        SqlConnection conn = new SqlConnection("Server = localhost;Database = kole; Integrated Security = true");
            SqlCommand cmd = new SqlCommand("sle", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@Userr", txt.Text);
            cmd.Parameters.AddWithValue("@ins", psw.Password);
            conn.Open();
            SqlDataAdapter adapt = new SqlDataAdapter(cmd);
            DataSet ds = new DataSet();
            adapt.Fill(ds);
            conn.Close();
            int count = ds.Tables[0].Rows.Count;
            if (count == 0)
            {
                MessageBox.Show("This user don't exist");
                SystemSounds.Hand.Play();
                txt.Text = "";
                psw.Password = "";
            }
            else if (count == 1)
            {
                MessageBox.Show("Granted!");
                SystemSounds.Asterisk.Play();
                conn.Open();
    }

如何正确解密密码,用于登录程序?由于

密码不应该加密保存,因为它们是可检索的。相反,它们应该被散列,加密散列是一个不能逆转的单向函数。在输入时对密码进行散列,并将散列后的值输入到DB中。在验证时,要验证的密码以与数据库中散列值相同的方式进行散列。

上面的"哈希"是指:用随机盐迭代HMAC大约100ms的持续时间(盐需要与哈希一起保存)。使用password_hash、PBKDF2、Bcrypt等函数和类似的函数。关键是要让攻击者花费大量时间通过暴力破解找到密码。

参见OWASP(开放Web应用程序安全项目)密码存储备忘单。

很简单,假设一个普通大众使用的应用程序,用户期望良好的安全性,你真的需要咨询安全领域的专家,不要等到攻击之后。

最后使用良好的双因素身份验证,并对所有服务器管理员保持良好的控制。

在你的[dbo]。[sle]存储过程,您需要

SET @ins = EncryptByPassPhrase('8', @ins)

最新更新