Asp.net core 标识核心的密码历史记录

Asp.net core 标识核心的密码历史记录,asp.net-core,asp.net-identity,password-encryption,Asp.net Core,Asp.net Identity,Password Encryption,密码历史记录是否有默认实现?我正试图用identity在我的项目上实现这个特性,所以我添加了包含密码哈希的密码历史记录表。当用户更改密码时,usermanager为密码生成哈希 var passwordHash=\u userManager.PasswordHasher.HashPassword(user,newPassword) 如果此哈希未插入密码历史记录表,则允许更改密码,否则返回错误 但问题是,每次为特定密码生成哈希时,它都会生成无法比较的随机哈希 var passwordHash=\u

密码历史记录是否有默认实现?我正试图用identity在我的项目上实现这个特性,所以我添加了包含密码哈希的密码历史记录表。当用户更改密码时,usermanager为密码生成哈希

var passwordHash=\u userManager.PasswordHasher.HashPassword(user,newPassword)

如果此哈希未插入密码历史记录表,则允许更改密码,否则返回错误

但问题是,每次为特定密码生成哈希时,它都会生成无法比较的随机哈希

var passwordHash=\u userManager.PasswordHasher.HashPassword(user,newPassword)

散列不同于

\u userManager.ResetPasswordAsync(用户、请求、令牌、密码)

生成的密码哈希

可能是我用了错误的方式。我在实现密码历史记录时犯了什么错误


感谢您每次使用不同的哈希-这是默认实现
IPasswordHasher
的工作方式。请查看此答案以了解更多详细信息:

因此,对于您的实现密码历史记录,您可以实现
IPasswordHasher
,或者使用方法
PasswordVerificationResult VerifyHashedPassword(t用户、字符串hashedPassword、字符串提供密码)使用所有存储的密码哈希验证新密码

举个例子:

var passAlreadyExist = user.UserHistory
                .Select(h => h.PasswordHash)
                .Distinct()
                .Any(hash =>
                {
                    var res = manager.PasswordHasher.VerifyHashedPassword(user, hash, password);
                    return res == PasswordVerificationResult.Success;
                });

其中
UserHistory
-它是一个自定义表,包含一些用户信息,如密码、电子邮件、姓名……

它不应该生成随机哈希。每次都应该为相同的密码生成相同的哈希。否则有些东西会严重损坏。我尝试重新设置相同的密码哈希值,但你做错了。明显地每次都应该将相同的数据散列到相同的散列中。否则,一切都毫无意义。发布错误代码。@EJP是正确的。如果相同的密码并不总是产生相同的哈希,那么就没有人可以登录,因为这是身份验证过程的一部分。用户输入的密码经过哈希处理,然后与数据库中的哈希密码进行比较(基本上与验证过程完全相同)。有更新吗?我也面临同样的问题
var newPasswordHash=\u passwordHasher.HashPassword(用户,密码);var newPasswordHash1=\u passwordHasher.HashPassword(用户,密码)每行返回不同的值