2015-12-02 76 views
0

情景是這樣的:密碼以散列密碼的形式返回到輸入字段,
在這種情況下,1位用戶不更新密碼只返回當前散列密碼
2否則用戶更新他的/她的密碼,然後散列新的密碼,然後將其保存在數據庫中。
所以如何檢查返回的密碼,如果哈希或不?檢查輸入的密碼是否被散列

代碼:

public int UpdatePrivilege(User user, int changerId, string pwd) 
{ 
    if (user.pwd == pwd) //how to check if hashed or not. 
    { 
     user.pwd = _Md5Hash(user.pwd); 
    } 
    return dalc.Update(user, changerId); 
} 

其次,可以說用戶不更新密碼不舊密碼將保持,因爲它是保存過程後?

+1

但我不明白鏈接的答案如何解決OP的問題。如果用戶輸入一個像7A34FE這樣的新密碼,其他答案的正則表達式會告訴他它已經被散列。您必須跟蹤用戶是通過輸入字段的「TextChanged」事件更改密碼還是將輸入字段中的最終文本與您之前輸入的散列值進行比較。 –

回答

1

你是錯誤的方向。考慮以下情況:

  1. 我的密碼是abc,這將被散列(比方說,MD5),並存儲在數據庫一樣75d22b7a1b5be026653445831b9f0c61

  2. 當我打開頁面時,會使用散列字符串(也許在UI代碼中)。

  3. 我將密碼從abc更改爲75d22b7a1b5be026653445831b9f0c61

  4. 您的代碼獲取我的新密碼並判斷它未更改。錯誤。

如果用戶已經從密碼文本改變了他的密碼,你永遠無法知道,只有UI代碼(比方說,在Web應用程序的JavaScript)知道。您應該讓UI代碼告訴後端是否已更改。

+0

如果您輸入了相同的密碼,它將會更改,但由於您輸入了相同的字符,因此其值將保留爲舊密碼。因此更改日期可以顯示密碼已更改。我對嗎 ? – Saif

+0

@Smart如果我將密碼更改爲'75d2 ...',在數據庫中它應該是'c6b24c3e4e98ae50cc5a5f1fd7eed790',我的新密碼的md5散列。 –