ASP>NET 标识:如何将用户输入的密码与散列密码进行比较?



我创建了一个名为PasswordHistory的表。每次用户更改密码时,都应将当前密码复制到密码历史记录表中。该策略是以下 2 项中限制性最强的策略:

  1. 用户不能使用最近 8 个密码中的任何一个
  2. 或在过去 2 年内使用过的密码

我想知道如何将新输入的密码与现有密码进行比较,但这是散列的?

这是我的代码:

var _limitDate = DateTime.Now.AddYears(-2);
int n = db.PasswordsHistory.Where(pwd => pwd.UserId == userId &&  pwd.ChangeDate > _limitDate).Count();
var pwdList = new List<PasswordHistory>();
if(n >= 8)
{
   pwdList = db.PasswordsHistory
       .Where(pwd => pwd.ChangeDate > _limitDate)
       .ToList();
}
else
{
   pwdList = db.PasswordsHistory
      .OrderByDescending(pwd => pwd.ChangeDate)
      .Take(8)
      .ToList();
}
if (pwdList.Count == 0)
{
   return false;
}
else
{
   foreach (var pwd in pwdList)
   {
      //compare the password entered by the user with the password stored in the PasswordHistory table
   }
}

感谢您的帮助

请仅将密码哈希存储在历史记录中。您可以通过PasswordHasher.VerifyHashedPassword(string hashedPassword, string providedPassword)将旧哈希与提供的密码进行比较 - 这是身份的一部分。

与检查其正确性的方式相同 - 使用相同的算法对其进行哈希处理(如果您使用加盐哈希,则使用盐(并比较 2 个哈希结果。

您知道最初使用什么算法对它们进行哈希处理吗?

将您的旧密码也保存为哈希值。 尽最大努力永远不要在任何地方将密码作为明文...

相关内容

  • 没有找到相关文章

最新更新