试图找到相关答案很长一段时间,但还没有被说服。
我正在尝试使用 RijndaelManaged 进行加密。为了创建密钥,我将密码、盐和迭代传递给 Rfc2898DeriveBytes。
如果用户输入的密码低于特定长度,我正在考虑添加常量,然后再将其传递给 Rfc2898DeriveBytes。
到目前为止,我发现添加常量不会为安全性增加任何好处。假设攻击者可以访问包含加密数据和盐的数据库,但不保持不变会给他带来一些困难。虽然最后他会发现那个不变。
或者将任何长度的密码传递给 Rfc2898DeriveBytes 是“非常安全的”而不用担心?
传递较短或较长的密码是否会影响密钥派生过程,哪个更好和最推荐?
到目前为止,我所知道的随机盐和更多迭代很重要。
以下是代码,我应该删除向密码添加常量还是保留它?
(注:用户密码长度限制在 GUI 没有应用,用户可以传递 1 个字符甚至超过 10 个字符)
string constant = "AnyConstantToMakePasswordBigger";
if (password.Length < 8)
{
password = password + constant;
}
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
byte[] salt = new byte[8];
rng.GetBytes(salt);
Rfc2898DeriveBytes derivedKey = new Rfc2898DeriveBytes(password, salt, 1000);
using (RijndaelManaged aes = new RijndaelManaged())
{
aes.Key = derivedKey.GetBytes(keyLength);
.....
}
欢迎任何正面或负面的评论和回应。