猿问

PBKDF2 c#.NET 的性能与

我需要为我们的系统实现密码散列机制。我正在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);

    }


}


MYYA
浏览 257回答 1
1回答

holdtom

正如您所说,目标的标准延迟是 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);}
随时随地看视频慕课网APP
我要回答