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
abc
更改为75d22b7a1b5be026653445831b9f0c61
你永远无法从密码文本判断用户是否更改了密码,只有UI代码(比如web应用程序中的javascript)知道这一点。如果后端发生了更改,您应该让UI代码告诉后端。我认为这是一个单一的责任问题。 你的方法应该只做一件事。如果密码正确,请检查密码;如果需要,请更改密码;或者检查密码是否已更改 仅仅通过接收一个字符串是不可能决定它是否是散列的。 您可以对密码本身做一些限制,比如不超过30个字符,然后确保哈希值始终超过30个字符(或者密码必须包含哈希值不能包含的特殊字符),但这并不总是有效的,也不是一个好主意 我建议为每个功能创建单独的方法。 IE:哈希密码、更改密码、检查密码
我希望这能有所帮助。但我看不出链接的答案如何解决OP的问题。如果用户输入一个新密码,比如
7A34FE
,其他答案的正则表达式会告诉他密码已经散列了。您必须通过输入字段的TextChanged
事件或将输入字段中的最终文本与您之前输入的哈希值进行比较来跟踪用户是否更改了密码。如果您输入了相同的密码,它将更改,但其值将保持为旧密码,因为您输入了相同的字符。因此,更改日期可以显示密码已更改。我说得对吗?@Smart如果我将密码更改为75d2…
,则数据库中的密码应该是c6b24c3e4e98ae50cc5a5f1fd7eed790
,即我的新密码的md5散列。