密码哈希身份框架和盐

web*_*orm 6 password-hash asp.net-identity

我的任务是确保用户在更改密码时不能使用以前的密码。为此,当 Identity 框架对密码进行哈希处理时,我会存储他们密码的哈希值。

我的问题是如何比较用户新选择的密码的哈希值和我保存的他们以前使用的密码的哈希值?我需要考虑身份框架正在使用的盐。

更新:我正在使用appUserManager.PasswordHasher.HashPassword(passwordToHash)散列密码,但它每次都会创建一个新的散列(我认为这是因为 Identity 框架在内部使用盐)。

tra*_*max 4

用户的当前密码哈希存储在 table/column 中AspNetUsers.PasswordHash。这也可以通过 EF: 获得ApplicationDbContext.Users.PasswordHash

因此,您需要创建自己的表来引用用户表,并在每次密码更改时将以前的哈希值复制到您的表中。

下一步是验证新密码与任何旧的哈希值都不匹配。为此你需要使用Microsoft.AspNet.Identity.PasswordHasher.VerifyHashedPassword(string hashedPassword, string providedPassword)

其中hashedPassword将是历史哈希表中的值,并且providedPassword将是新的建议密码。