【问题标题】:C# wpf Sql Table, encrypted passwordsC# wpf Sql Table,加密密码
【发布时间】:2016-10-28 15:30:27
【问题描述】:

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

为了加密数据我使用这个存储过程

   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();
    }

如何正确解密密码,用于登录程序。谢谢

【问题讨论】:

  • 除了问题:dd你考虑散列而不是加密?
  • 我该怎么做,你能告诉我一个样本,因为我是新人
  • 我认为这些网站几乎可以告诉您原因和方法 (crackstation.net/hashing-security.htm / codeproject.com/Articles/608860/…)。总之,最好不要找回密码,以防网站以某种方式泄露信息。
  • @Caramirel , 但是我如何使用加密密码登录,因为你说,找回密码不好
  • 当用户注册时,密码会以特定方式(散列)“加密”。然后,如果用户决定登录,密码会以完全相同的方式被打乱。如果匹配,则密码正确。

标签: c# sql encryption


【解决方案1】:

不应以加密方式保存密码,因为它们是可检索的。相反,它们应该被散列,加密散列是一种无法逆转的单向函数。输入时,密码被散列,散列值输入数据库。在验证时,要验证的密码以相同的方式进行哈希处理,并与数据库中的哈希值进行比较。

上面的“散列”是指:使用随机盐在 HMAC 上迭代大约 100 毫秒(盐需要与散列一起保存)。使用 password_hash、PBKDF2、Bcrypt 等函数和类似函数。关键是让攻击者花费大量时间通过蛮力寻找密码。

请参阅 OWASP(开放式 Web 应用程序安全项目)Password Storage Cheat Sheet

很简单,假设一个应用程序被公众使用并且用户期望它具有良好的安全性,您确实需要咨询安全领域专家,不要等到攻击之后。

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

【讨论】:

    【解决方案2】:

    在您的 [dbo].[sle] 存储过程中,您需要

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

    【讨论】:

      猜你喜欢
      • 2011-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-03
      • 2015-09-11
      • 1970-01-01
      • 2012-01-25
      相关资源
      最近更新 更多