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

本文关键字:经过 哈希 处理 是否 密码 输入 检查 | 更新日期: 2023-09-27 18:25:22

场景如下:
密码作为散列密码返回到输入字段,
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. 我的密码是abc,它将被散列(比方说MD5)并像75d22b7a1b5be026653445831b9f0c61一样存储在数据库中。

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

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

  4. 你的代码得到了我的新密码,并判断它没有改变。错了。

你永远无法从密码文本中判断用户是否更改了密码,只有UI代码(比如网络应用程序中的javascript)知道这一点。您应该让UI代码告诉后端它是否发生了更改。

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

仅仅通过接收一个字符串是不可能决定它是否被散列的。你可以对密码本身进行一些限制,比如说不超过30个字符,然后确保哈希始终超过30(或者密码必须包含哈希不能包含的特殊字符),但这并不总是有效的,也不是一个好主意。

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

我希望这能有所帮助。