使用Rfc2898DeriveBytes时,密码哈希应该是多少字节



我下面有一个哈希函数,128字节的哈希是用于密码的overkill还是underkill?

public string HashPassword(string password)
{
Rfc2898DeriveBytes rfc = new(
password,
_salt,
_iterations,
_hashAlgorithmName
);
// is 128 bytes a good number?
var hashedPasswordBytes = rfc.GetBytes(128);
return Convert.ToBase64String(hashedPasswordBytes);
}

这与您使用的_hashAlgorithmName的输出长度有关。例如,如果使用HMAC-SHA512,则输出长度为512位(64字节(,并且获得的字节数超过64字节有点过头了。对于今天的标准来说,即使是256位的熵也足够了。

实际上,这就是为什么ASP.NET Core Identity包在使用HMAC-SHA512使用Rfc2898DeriveBytes哈希密码时仅使用32字节(256位(的原因。

供参考:https://github.com/dotnet/aspnetcore/blob/main/src/Identity/Extensions.Core/src/PasswordHasher.cs

相关内容

  • 没有找到相关文章

最新更新