我正在使用一个应用程序,当用户可以通过键入他们的信息登录到程序中。密码以加密的形式存储在表中。但当我尝试使用此密码登录时,它不起作用。\
为了加密数据,我使用了这个存储过程
   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();
    }如何以正确的方式解密密码,以便用于登录程序。谢谢
发布于 2016-06-27 00:11:13
密码不应加密保存,因为它们是可检索的。相反,它们应该是散列的,加密散列是一个无法逆转的单向函数。在输入时,对密码进行散列,并将散列值输入到数据库中。在验证时,将以相同的方式对要验证的密码进行散列,并将其与数据库中的散列值进行比较。
上面的“散列”意味着:使用随机盐在HMAC上迭代大约100ms (盐需要与散列一起保存)。使用password_hash、PBKDF2、Bcrypt等函数。重点是让攻击者花费大量时间通过暴力破解来寻找密码。
参见OWASP (开放Web应用程序安全项目) Password Storage Cheat Sheet。
很简单,假设一个由普通公众使用的应用程序,并且用户期望良好的安全性,您确实需要咨询安全领域专家,不要等到攻击发生后。
最后,使用良好的双因素身份验证,并保持对所有服务器管理员的良好控制。
发布于 2016-06-27 02:06:45
在dbo.sle存储过程中,您需要
SET @ins = EncryptByPassPhrase('8', @ins)https://stackoverflow.com/questions/38040043
复制相似问题