2015-12-02 49 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散列。 –