密码哈希身份框架和盐
Password hash Identity framework and salt
我的任务是确保用户在更改密码时不能使用以前的密码。为此,当身份框架对密码进行哈希处理时,我会存储他们密码的哈希值。
我的问题是如何比较用户新选择的密码的哈希值和我保存的他们以前使用过的密码的哈希值?我需要考虑身份框架使用的盐。
更新:我正在使用 appUserManager.PasswordHasher.HashPassword(passwordToHash)
对密码进行哈希处理,但它每次都会创建一个新的哈希值(我认为这是因为身份框架在内部使用盐)。
用户的当前密码哈希存储在 table/column AspNetUsers.PasswordHash
中。这也可以通过 EF 获得:ApplicationDbContext.Users.PasswordHash
。
因此您需要创建自己的 table 来引用用户 table 并在每次更改密码时将之前的哈希值复制到您的 table.
下一步是验证新密码是否与任何旧密码不匹配。为此,您需要使用 Microsoft.AspNet.Identity.PasswordHasher.VerifyHashedPassword(string hashedPassword, string providedPassword)
其中 hashedPassword
是来自您的 table 历史哈希的值,providedPassword
是建议的新密码。
我的任务是确保用户在更改密码时不能使用以前的密码。为此,当身份框架对密码进行哈希处理时,我会存储他们密码的哈希值。
我的问题是如何比较用户新选择的密码的哈希值和我保存的他们以前使用过的密码的哈希值?我需要考虑身份框架使用的盐。
更新:我正在使用 appUserManager.PasswordHasher.HashPassword(passwordToHash)
对密码进行哈希处理,但它每次都会创建一个新的哈希值(我认为这是因为身份框架在内部使用盐)。
用户的当前密码哈希存储在 table/column AspNetUsers.PasswordHash
中。这也可以通过 EF 获得:ApplicationDbContext.Users.PasswordHash
。
因此您需要创建自己的 table 来引用用户 table 并在每次更改密码时将之前的哈希值复制到您的 table.
下一步是验证新密码是否与任何旧密码不匹配。为此,您需要使用 Microsoft.AspNet.Identity.PasswordHasher.VerifyHashedPassword(string hashedPassword, string providedPassword)
其中 hashedPassword
是来自您的 table 历史哈希的值,providedPassword
是建议的新密码。