【问题标题】:Unable to match hash and salt passwords with database values无法将哈希和盐密码与数据库值匹配
【发布时间】:2012-07-11 03:45:18
【问题描述】:

我正在开发一个应用程序,员工将首先通过输入登录 ID 和密码注册到系统。密码经过散列和加盐处理并存储在登录表中(这两个值都与 loginID 值一起存储)。但是,当我通过代码并登录到应用程序(在注册过程之后)时,哈希值和盐值永远不会匹配。

当用户登录系统时,我将如何验证用户的密码?

加密功能:

protected static void EncryptPassword(eWebEmployee oEmp)
{
    // Create Hash & Salt
    sysSecurity oSecurity = new sysSecurity();
    oEmp.EmpPasswordSalt = oSecurity.CreateSalt(5);
    oEmp.EmpPasswordHash = oSecurity.CreatePasswordHash(oEmp.EmpPasswordSalt, oEmp.EmpPassword);        
}  

数据库调用:

oDbConn.Open();
DbDataReader oDbDataReader = oDbCommand.ExecuteReader();
while (oDbDataReader.Read())
{
    if (!oDbDataReader.IsDBNull(0) && !oDbDataReader.IsDBNull(1))
    {
        if (oEmp.EmpPasswordSalt == oDbDataReader.GetString(1)
            && oEmp.EmpPasswordHash == oDbDataReader.GetString(0))
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    else
    {
        return false;
    }
}
oDbConnection.Close();
}

【问题讨论】:

  • 完全偏离主题,但为什么每个变量都以 o 开头?主题:您在这里显示的代码不够多,无法弄清楚发生了什么。
  • @aquinas... (1) 以前开发者的代码; (2) 将更新帖子以显示更多代码,但我认为下面的 2 个答案已经解决了。

标签: c# asp.net hash salt


【解决方案1】:

我阅读您的代码的方式每次都会创建一个新的盐。您应该从数据库中获取盐,使用用户提供的密码计算哈希,然后将哈希与存储在数据库中的哈希进行比较。如果它们相等,则用户输入了正确的密码。仅在注册时创建新盐。

【讨论】:

    【解决方案2】:

    您的代码的用途有点难以理解,但通常您会使用盐值和密码字符串创建散列。当您再次登录时,您使用相同的盐值执行完全相同的操作。然后将密码哈希与您数据库中的密码哈希进行比较。

    【讨论】:

      猜你喜欢
      • 2014-08-18
      • 2012-07-05
      • 1970-01-01
      • 2012-03-06
      • 1970-01-01
      • 1970-01-01
      • 2016-10-05
      • 1970-01-01
      • 2015-05-27
      相关资源
      最近更新 更多