2012-07-11 71 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