为了账号安全,请及时绑定邮箱和手机立即绑定

PBKDF2 c#.NET 的性能与

PBKDF2 c#.NET 的性能与

C#
MYYA 2021-06-25 19:49:30
我需要为我们的系统实现密码散列机制。我正在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);

}


查看完整回答
反对 回复 2021-06-27
  • 1 回答
  • 0 关注
  • 256 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信