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

时间:2016-10-20 00:51:20

标签: asp.net-identity

我创建了一个名为PasswordHistory的表格。每次用户更改密码时,都应将当前密码复制到PasswordHistory表。该政策是以下2中最严格的政策:

  1. 用户不能使用最近8个密码中的任何一个
  2. 或过去两年中使用过的密码
  3. 我想知道如何将新输入的密码与现有密码进行比较但是是否经过哈希处理?

    这是我的代码:

    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
       }
    }
    

    感谢您的帮助

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

同样地检查它是否正确 - 使用相同的算法(如果使用盐渍哈希值,则使用盐)并比较2个哈希结果。

你知道最初使用什么算法来散列它们吗?

将旧密码另存为哈希。尽力在任何地方都不要将密码作为明文...