问题描述
我正在尝试在现有应用程序上实现随机盐md5算法。 用户密码作为md5哈希存储在数据库中。 对于现有用户,请执行以下步骤
在客户端(javascript)
client_password = md5(md5(plain_password) + random_salt)
在服务器端
server_password = md5(md5_password + same_random_salt),
check client_password to server_password
我正在努力寻找解决方案,以在更改密码的情况下在数据库中存储不含盐的用户md5密码。
谢谢
1楼
首先:不要使用MD5:强度不够。
@Shaggy Frog的出色建议,请使用bycrypt。 这些帖子应该可以帮助您:
参见 。
当有人保存密码时,您将在服务器上执行以下操作:
BCrypt.hashpw(plain_password, salt);
当有人尝试登录时:
if(BCrypt.checkpw(password_typed_by_user, stored_hash)
{
//itmatches.. log him/her in.
}
您可以做的是使用用户名(或用户名中的几个字母)作为盐,因此您也不必将其存储在某个地方。
更改密码后,您需要再次获取纯文本密码(在服务器上),然后再次对其进行哈希处理,就像最初保存密码时一样。 如果您正在考虑检索,那是没有办法的,那就是哈希。 像大多数网站一样,您可以将密码更改为一些随机数字,然后通过电子邮件将其发送到请求的地址。
2楼
客户端加密毫无用处,因为您最终无法控制结果。 仅服务器端加密有效。
将密码存储为MD5哈希不是最佳实践。 这就是网站容易被黑客入侵的方式。 盐对您无济于事。
。