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
相关产品推荐
相关产品推荐

