You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HashPassword每次返回不同值?ASP.NET Core密码验证问题求助

问题分析与解决

为什么HashPassword每次返回不同结果?

ASP.NET Core Identity的PasswordHasher每次调用HashPassword时会自动生成随机盐值,所以即使输入相同密码,每次生成的哈希字符串也不一样——这是故意设计的安全机制,目的是防止彩虹表攻击,提升密码存储的安全性。

你的代码逻辑错误

你完全搞反了密码验证的流程:
当前代码是把用户输入的密码重新哈希,再拿这个新哈希去和数据库存储的哈希对比,这不符合验证逻辑。正确的做法是直接用用户输入的明文密码,和数据库中存储的哈希密码传入VerifyHashedPassword方法,由该方法自动完成加盐哈希对比。

修正后的代码

private bool CompareHashPassword(UserLogin userLogin, User currentUser)
{
    IdentityUser identityUser = new IdentityUser() { UserName = userLogin.Username }; 
    PasswordHasher<IdentityUser> hasher = new PasswordHasher<IdentityUser>();
    // 直接传入数据库存储的哈希、用户输入的明文密码
    PasswordVerificationResult compareResult = hasher.VerifyHashedPassword(identityUser, currentUser.Password, userLogin.Password);

    return compareResult == PasswordVerificationResult.Success;
}

补充说明

VerifyHashedPassword会自动从数据库存储的哈希字符串中解析出盐值、哈希算法等信息,然后用相同规则对用户输入的明文密码加盐哈希,最终对比两个哈希值是否一致——这就保证了即使每次哈希结果不同,也能正确验证密码是否匹配。

内容的提问来源于stack exchange,提问作者prog_prog

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 15:45:52