.NET 7升级后PasswordHasher哈希结果不一致,如何恢复.NET 6算法?
解决.NET 7中PasswordHasher与.NET 6哈希结果不一致的问题
核心解决思路是通过完全对齐.NET 6的配置参数,让.NET 7的PasswordHasher复用旧版哈希逻辑,具体操作如下:
1. 确保配置完全匹配.NET 6
.NET 7的PasswordHasher默认迭代数已从10000提升至100000,但只要显式指定原配置参数,就能恢复.NET 6的哈希行为。保持PasswordHasher实例化代码与.NET 6完全一致:
private static readonly IPasswordHasher<object> s_passwordHasher = new PasswordHasher<object>( Options.Create(new PasswordHasherOptions { CompatibilityMode = PasswordHasherCompatibilityMode.IdentityV3, IterationCount = 10000 }));
2. 检查验证方法的参数正确性
确认PasswordHelper.VerifyHashedPassword方法的参数传递顺序无误,必须严格遵循:用户对象(可传null)、存储的哈希值、输入的明文密码。示例实现如下:
public static PasswordVerificationResult VerifyHashedPassword(string hashedPassword, string plainPassword) { return s_passwordHasher.VerifyHashedPassword(null, hashedPassword, plainPassword); }
3. 额外排查点
- 确认升级过程中未修改哈希值的存储逻辑(如编码转换、字符串截断、额外加密等)
- 检查项目中是否有全局DI配置覆盖了
PasswordHasherOptions的默认值,确保局部配置优先级更高
按上述配置调整后,.NET 7的PasswordHasher会使用与.NET 6完全一致的PBKDF2算法、迭代数及兼容性模式,旧哈希值的验证结果将恢复为Success。
内容的提问来源于stack exchange,提问作者Perrier
相关产品推荐
相关产品推荐

