更改哈希而不会丢失数据库用户

时间:2016-04-27 11:02:08

标签: php sql-server hash

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

但是由于我不喜欢这种加密,而且我已经在重新构建我的CMS了,所以我也改变了哈希。

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

2 个答案:

答案 0 :(得分:4)

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

newPasswordnewSaltisRequired

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

方式

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

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

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

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

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

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

下线

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

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

答案 1 :(得分:2)

MD5是哈希 - 而不是加密。它不包含整个数据 - 就像数据的标识符一样。所以它无法解密。所以基本上你不能将现有用户的密码更改为你自己的加密而不妨碍它们。

更多学习内容:

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

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