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

C# 检查输入的密码是否经过哈希处理,c#,hash,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.

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

第二,假设用户不更新密码;旧密码在保存过程后是否会保持原样

你走错方向了。考虑以下情况:

  • 我的密码是
    abc
    ,它将被散列(比如MD5)并存储在数据库中,如
    75d22b7a1b5be026653445831b9f0c61

  • 当我打开页面时,将使用哈希字符串(可能在UI代码中)

  • 我将密码从
    abc
    更改为
    75d22b7a1b5be026653445831b9f0c61

  • 你的代码得到我的新密码,并判断它是不变的。错


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

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

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

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


    我希望这能有所帮助。

    但我看不出链接的答案如何解决OP的问题。如果用户输入一个新密码,比如
    7A34FE
    ,其他答案的正则表达式会告诉他密码已经散列了。您必须通过输入字段的
    TextChanged
    事件或将输入字段中的最终文本与您之前输入的哈希值进行比较来跟踪用户是否更改了密码。如果您输入了相同的密码,它将更改,但其值将保持为旧密码,因为您输入了相同的字符。因此,更改日期可以显示密码已更改。我说得对吗?@Smart如果我将密码更改为
    75d2…
    ,则数据库中的密码应该是
    c6b24c3e4e98ae50cc5a5f1fd7eed790
    ,即我的新密码的md5散列。