场景如下:
密码作为散列密码返回输入字段,
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);
}
其次,假设用户不更新密码;保存过程后旧密码会保持原样吗?
答案 0 :(得分:2)
你的方向错误。考虑以下情况:
我的密码为abc
,将进行哈希处理(假设为MD5)并存储在75d22b7a1b5be026653445831b9f0c61
等数据库中。
当我打开页面时,将使用散列字符串(可能在UI代码中)。
我将密码从abc
更改为75d22b7a1b5be026653445831b9f0c61
。
您的代码获取我的新密码并判断其未更改。错了。
您永远无法判断用户是否已从密码文本更改了密码,只有UI代码(假设网络应用中的javascript)知道这一点。您应该让UI代码告诉后端它是否已更改。
答案 1 :(得分:0)
我认为这是一个单一责任问题。 您的方法只能做一件事。请检查密码是否正确,如果需要,请更改密码,或者检查是否已更改。
仅通过接收字符串就无法确定它是否被哈希。 您可以对密码本身进行一些限制,例如说不超过30个字符,然后确保哈希值始终长于30个字符(或者密码必须包含哈希不能包含的特殊字符),但这并不总是有效并且不会还是个好主意。
我建议为每种功能创建单独的方法。 IE:哈希密码,更改密码,检查密码。
我希望这会有所帮助。