密码哈希通过Rfc2898DeriveBytes -什么传递给getBytes
本文关键字:getBytes 什么 哈希通 Rfc2898DeriveBytes 密码 | 更新日期: 2023-09-27 18:04:26
我使用Rfc2898DeriveBytes来散列密码。
然而,我不确定要传递什么给GetBytes方法,它期望一个int。
我应该传递什么值给this,为什么?
Rfc2898DeriveBytes hasher = new Rfc2898DeriveBytes(password, System.Text.Encoding.Default.GetBytes(salt), PasswordHasher.Iterations);
return Convert.ToBase64String(hasher.GetBytes(100));
如http://msdn.microsoft.com/en-us/library/system.security.cryptography.rfc2898derivebytes.getbytes.aspx所述,GetBytes的参数是您希望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
本质上,您将获得您选择的任何长度的一致字节列表(基于密码、盐和迭代)。您可以随时从相同的输入重新生成完全相同的字节列表。