C#密码加密

Mat*_*att 2 c# asp.net encryption

我发现一些在线代码可以很好地用于我想做的事情.我需要一些能够加密密码,将其保存到数据库并轻松检索的东西.以下代码几乎可以满足我的一切需求.

        string UserName = txtUser.Text;
        string password = txtPass.Text;

        string encrKey = "keyvalue";
        byte[] byteKey = { };
        byte[] IV = {25, 47, 60, 88, 99, 106, 125, 139};
        byteKey = Encoding.UTF8.GetBytes(encrKey.Substring(0, 8));
        DESCryptoServiceProvider des = new DESCryptoServiceProvider();
        byte[] inputArray = Encoding.UTF8.GetBytes(password);

        MemoryStream ms = new MemoryStream();
        CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(byteKey, IV), CryptoStreamMode.Write);
        cs.Write(inputArray, 0, inputArray.Length);
        cs.FlushFinalBlock();
        password = Convert.ToBase64String(ms.ToArray());

        SqlCommand cmd = new SqlCommand("INSERT INTO USers (UserName, Password) VALUES (@UserName, @Password)", myConnection);
        cmd.CommandType = CommandType.Text;

        cmd.Parameters.AddWithValue("@UserName", UserName);
        cmd.Parameters.AddWithValue("@Password", password);

        SqlDataReader rdr = cmd.ExecuteReader();
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是密码为8个字符或更长时间的代码错误.我收到此错误:

System.Security.Cryptography.CryptographicException:指定的键不是此算法的有效大小.在Cryptostream行上生成错误.

我需要为我的钥匙使用不同的类型吗?

Var*_*ant 14

通常的做法是不加密数据库中的密码,而是对其进行哈希处理.
当用户尝试登录时,您将获取其键入的密码,将其哈希并与存储在数据库中的哈希进行比较.

行业标准哈希算法是SHA-1,可在.NET中读取.

为了更高的安全性,您在散列中使用"Salt".

您可以在这里阅读更多相关信息:Salting Your Password:Best Practices?