Rfc2898DeriveBytes的密码哈希 - 传递什么以获取字节

9

我正在使用Rfc2898DeriveBytes来哈希密码。

但是,我不确定应该传递什么值给期望int参数的GetBytes方法。

我应该传递什么值以及为什么?

   Rfc2898DeriveBytes hasher = new Rfc2898DeriveBytes(password, System.Text.Encoding.Default.GetBytes(salt), PasswordHasher.Iterations);
      return Convert.ToBase64String(hasher.GetBytes(100));
1个回答

7
根据文档http://msdn.microsoft.com/en-us/library/system.security.cryptography.rfc2898derivebytes.getbytes.aspx所述,GetBytes方法的参数是你希望生成的字节数。 如果你需要5个字节,请传递5。 如果你需要500个,请传递500。 你请求多少个字节通常取决于你为正在生成的密钥(或其他加密输入)的预期用途需要多少字节数。
要更好地理解输出,请运行以下命令行应用程序:
internal static class Program
{
    private static void Main()
    {
        var deriver = new Rfc2898DeriveBytes("apples and oranges", 100, 20);
        Program.WriteArray(deriver, 5);
        Program.WriteArray(deriver, 10);
        Program.WriteArray(deriver, 20);

        Console.ReadLine();
    }

    private static void WriteArray(Rfc2898DeriveBytes source, int count)
    {
        source.Reset();
        Console.WriteLine(string.Join(" ", source.GetBytes(count).Select(b => b.ToString())));
    }
}

输出应该如下所示:
208 194 113 91 125
208 194 113 91 125 157 138 234 20 151
208 194 113 91 125 157 138 234 20 151 159 151 23 94 11 210 38 101 186 143

基本上,您将获得一个基于密码、盐和迭代次数的一致字节列表,长度可根据您的选择而定。您可以随时从相同的输入重新生成完全相同的字节列表。

就此而言,StackExchange OpenID提供程序使用PBKDF2生成24字节的安全哈希值。您可以在https://code.google.com/p/stackid/source/browse/OpenIdProvider/Current.cs找到相关代码。 - Preston Guillot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接