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

Php 在不丢失数据库用户的情况下更改哈希,php,sql-server,hash,Php,Sql Server,Hash,我有这个网站,有一个简单的CMS,当用户注册时,他们的密码会用MD5加密 但由于我不喜欢这种加密,而且我已经在重新构建我的CMS,我也改变了哈希 现在,他们是否可以在另一种加密方法中更改MD5,而不丢失我的数据库用户?MD5是一种哈希,而不是加密。它不包含所有的数据,就像数据的标识符一样。所以它不能被解密。因此,基本上,您无法在不妨碍现有用户的情况下将其密码更改为自己的加密 更多资料供研究: 您可以在保存密码的数据库中添加3个新列 newPassword,newSalt,isRequired

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

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


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

MD5
是一种哈希,而不是加密。它不包含所有的数据,就像数据的标识符一样。所以它不能被解密。因此,基本上,您无法在不妨碍现有用户的情况下将其密码更改为自己的加密

更多资料供研究:


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

newPassword
newSalt
isRequired

在这里,您可以保存由新密码创建的新密码(如果使用类似phps password_hash的散列)、新的散列密码以及自散列更新以来的首次登录尝试

方法

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

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

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

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

当用户重置其密码时,将使用新方法对其进行散列,并按照“新建”部分中的常规存储在数据库中,并将
isRequired
值设置为NO

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

顺其自然

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


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

您可以使用两列旧哈希和新哈希,直到所有用户再次使用新方法。请参阅-结尾有一节关于更新哈希。如果您重置了密码功能。请求所有用户通过新的哈希方法重置密码非常感谢!我还没有考虑过要创建第二个专栏,但我喜欢这个想法!我也会读这篇文章!谢谢你们。@jarlh:你们怎么知道它是SQL Server?你们真的不应该在密码哈希上使用自己的盐,你们真的应该使用PHP来处理密码安全性。在散列之前,请确保您在它们上安装或使用任何其他清理机制。这样做会更改密码并导致不必要的额外编码。@JayBlanchard当我说own salt时,我的意思是创建一个,例如
$random\u salt=mcrypt\u create\u iv(24,mcrypt\u DEV\u uradom)
由于PHP函数有一个内置的随机salt生成器,并将salt与散列一起存储,因此不需要额外的代码。@JayBlanchard虽然是真的,但文章是理论性的,而不是具体的代码。OP可以决定如何制作自己的盐。真dat@Matt。无论如何,我喜欢你解决这个问题的方法,我会用它来解决类似的问题。我已经快找到方法了,但是读了你的帖子,我就明白了!¯\_(ツ)_/¯