2012-07-11 46 views
0

我正在处理一个应用程序,其中员工将首先通过输入登录名和密码注册到系统中。密码被哈希和腌制并存储在登录表中(两个值都与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(); 
} 
+0

完全脱离主题,但为什么每个变量都以o开头?关于主题:你没有在这里展示足够的代码来弄清楚发生了什么。 – aquinas 2012-07-11 14:03:43

+0

@aquinas ...(1)来自以前的开发人员的代码; (2)将更新后显示更多的代码,但我认为下面的2个答案钉住了它。 – DotNetRookie 2012-07-11 14:05:33

回答

2

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

1

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

+0

@jrb ....非常感谢您的回复。 – DotNetRookie 2012-07-11 14:06:35