检查输入的密码是否经过哈希

时间:2015-12-02 08:27:46

标签: c# hash

场景如下:
密码作为散列密码返回输入字段,
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);
}

其次,假设用户不更新密码;保存过程后旧密码会保持原样吗?

2 个答案:

答案 0 :(得分:2)

你的方向错误。考虑以下情况:

  1. 我的密码为abc,将进行哈希处理(假设为MD5)并存储在75d22b7a1b5be026653445831b9f0c61等数据库中。

  2. 当我打开页面时,将使用散列字符串(可能在UI代码中)。

  3. 我将密码从abc更改为75d22b7a1b5be026653445831b9f0c61

  4. 您的代码获取我的新密码并判断其未更改。错了。

  5. 您永远无法判断用户是否已从密码文本更改了密码,只有UI代码(假设网络应用中的javascript)知道这一点。您应该让UI代码告诉后端它是否已更改。

答案 1 :(得分:0)

我认为这是一个单一责任问题。 您的方法只能做一件事。请检查密码是否正确,如果需要,请更改密码,或者检查是否已更改。

仅通过接收字符串就无法确定它是否被哈希。 您可以对密码本身进行一些限制,例如说不超过30个字符,然后确保哈希值始终长于30个字符(或者密码必须包含哈希不能包含的特殊字符),但这并不总是有效并且不会还是个好主意。

我建议为每种功能创建单独的方法。 IE:哈希密码,更改密码,检查密码。

我希望这会有所帮助。