无法将哈希和salt密码与数据库值匹配

时间:2012-07-11 13:47:45

标签: c# asp.net hash salt

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

如何在用户登录系统时验证用户的密码?

加密功能:

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();
}

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

理解代码的目的有点难,但通常使用salt值和密码字符串创建哈希。再次登录时,使用SAME salt值完全相同。然后将密码哈希与数据库中的密码进行比较。