Rfc2898DeriveBytes为何既基于HMACSHA1又支持自定义哈希算法?
关于Rfc2898DeriveBytes的哈希算法疑惑解答
这完全不存在矛盾,是版本迭代带来的功能扩展:
- 早期的
Rfc2898DeriveBytes确实仅基于HMACSHA1实现PBKDF2,文档里的描述是对这个初始实现的准确记录。 - 后续的.NET版本(比如.NET Core、.NET 5及以上)对这个类做了扩展,新增了支持传入自定义哈希算法的构造函数,这些新增的构造函数没有被标记为过时;而原来仅支持SHA1的旧构造函数则被标记为过时。
- PBKDF2标准本身并不限制必须使用SHA1,它支持任意HMAC兼容的哈希算法,所以.NET后续的扩展是符合标准的升级,让开发者可以选择更安全的哈希算法(比如SHA256、SHA512)来实现PBKDF2。
举个使用自定义哈希算法的示例:
using var deriveBytes = new Rfc2898DeriveBytes( password: "your-password", salt: Encoding.UTF8.GetBytes("your-salt"), iterations: 100000, hashAlgorithm: HashAlgorithmName.SHA512); byte[] key = deriveBytes.GetBytes(32);
内容的提问来源于stack exchange,提问作者ispiro
相关产品推荐
相关产品推荐

