在不丢失数据库用户的情况下更改哈希


Changing hash without losing database users

我有这个网站,有一个简单的CMS,当用户注册时,他们的密码在MD5中加密。

但是由于我不喜欢这种加密,并且我已经在再次构建我的CMS,因此我也更改了哈希。

现在,他们是否是一种在不丢失数据库用户的情况下以另一种加密方法更改 MD5 的方法?

您可以在保存密码的数据库中添加 3 个新列。

newPasswordnewSaltisRequired

在这里,您可以保存由新密码创建的新盐(如果使用像phps password_hash这样的哈希),新的哈希密码以及这是自哈希更新以来的首次登录尝试。

方法

您需要修改登录脚本以检查isRequired是否为"是"。 如果是这样,请拉出旧的哈希密码和旧盐,否则使用新密码和新盐。

对于所有当前用户,请将isRequired设置为"是"。

用户登录时,如果isRequired值为 YES,则将用户重定向到密码重置页面,否则照常继续。

此密码重置页面本质上是新的注册页面,但针对当前用户进行了修改,因此他们不必根据您处理数据的方式创建新的用户名等。

当用户重置其密码时,将使用新方法对其进行哈希处理,并像往常一样存储在"new"部分中的数据库中,并将isRequired值设置为NO.。

对于新用户,请确保注册页面将其密码放入newPassword列中并isRequired NO。

下线

最终,当所有isRequired值都为 NO 时,您可以更新数据库和编码以删除所有不再使用的旧列,删除与 MD5 哈希等相关的所有代码。

如果一些老用户仍未更改其密码,您可以删除其用户并让他们重新注册。也许向所有用户发送电子邮件,说明如果您在x天之前没有更新他们的密码,他们的数据将被删除,他们将不得不重新注册。

>MD5是一个哈希 - 而不是加密。它不保存整个数据 - 就像数据的标识符一样工作。所以它无法解密。因此,基本上您无法在不妨碍现有用户的情况下将现有用户的密码更改为您自己的加密。

更多研究:

http://en.wikipedia.org/wiki/MD5#Algorithm

https://stackoverflow.com/a/2717958/926943