【问题标题】:Performance of PBKDF2 c#.NET withPBKDF2 c#.NET 的性能
【发布时间】:2018-10-31 17:26:37
【问题描述】:

我需要为我们的系统实现密码散列机制。我为此目的使用PBKDF2。我为演示目的制作了一个小型控制台应用程序。使用我使用的参数,它会使用我的桌面56 ms 来生成最终的哈希。

从我看过的资料来看,他们提到100ms的生成时间应该是合理的。这是正确的假设还是我应该让我的一代变慢?如果是,我应该更改哪些参数?

代码:

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);
    }

}

【问题讨论】:

    标签: c# security encryption hash pbkdf2


    【解决方案1】:

    正如您所说,目标的标准延迟是 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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-27
      • 1970-01-01
      • 1970-01-01
      • 2015-12-03
      • 2015-05-18
      • 2015-02-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多