我需要为我们的系统实现密码散列机制。我正在PBKDF2为此目的使用。我为演示目的制作了一个小型控制台应用程序。使用我正在使用的参数,它使用我的桌面56 ms来生成最终的哈希值。从我查阅过的资料来看,他们提到应该合理确保 100 毫秒的生成时间。这是正确的假设还是我应该让我的一代变慢?如果是,我应该更改哪些参数?代码:class Program{ static void Main(string[] args) { var watch = System.Diagnostics.Stopwatch.StartNew(); byte[] op = null; op = GetPDKDF2("password", 20, 10000); watch.Stop(); Console.WriteLine("total time: " + watch.ElapsedMilliseconds); Console.ReadKey(); } public static byte[] GetPDKDF2(string password, int saltSize, int iterationCount) { var pdf = new Rfc2898DeriveBytes(password, saltSize, iterationCount); return pdf.GetBytes(20); }}
1 回答
holdtom
TA贡献1805条经验 获得超10个赞
正如您所说,目标的标准延迟是 100 毫秒。使用 PBKDF2 计算哈希所花费的时间与迭代次数成正比。考虑到这一点,您可能只需将迭代次数加倍即可获得大约 100 毫秒的延迟。
我建议你不要让迭代计数改变,至少不要作为函数的参数。随着硬件的进步,将来更改迭代计数是一个好主意,但您需要确保使用生成的哈希记录使用的迭代计数。
我会为迭代计数使用一个常量值:
const int ITERATION_COUNT = 20000;
并使用:
public static byte[] GetPDKDF2(string password, int saltSize)
{
var pdf = new Rfc2898DeriveBytes(password, saltSize, ITERATION_COUNT);
return pdf.GetBytes(20);
}
- 1 回答
- 0 关注
- 256 浏览
添加回答
举报
0/150
提交
取消