Php 在不要求所有用户更改密码的情况下重新设置密码

Php 在不要求所有用户更改密码的情况下重新设置密码,php,hash,passwords,sha256,crypt,Php,Hash,Passwords,Sha256,Crypt,前开发人员使用PHP函数和SHA256算法来存储密码哈希。为了提高系统的安全性,我想开始在Blowfish算法中使用crypt()(不幸的是,我们没有PHP5.5,因此password\u hash()不可用) 由于SHA256是一种不可逆的散列算法,有没有一种方法可以在不要求所有人重置密码的情况下开始使用盐密码的crypt()。因此,您不再拥有创建新密码摘要所需的数据 我想你需要每个人更新他们的密码。我假设你从未存储明文用户帐户密码,因为这确实是一件可怕的事情。因此,您不再拥有创建新密码摘要所

前开发人员使用PHP函数和SHA256算法来存储密码哈希。为了提高系统的安全性,我想开始在Blowfish算法中使用
crypt()
(不幸的是,我们没有PHP5.5,因此
password\u hash()
不可用)


由于SHA256是一种不可逆的散列算法,有没有一种方法可以在不要求所有人重置密码的情况下开始使用盐密码的
crypt()
。因此,您不再拥有创建新密码摘要所需的数据


我想你需要每个人更新他们的密码。

我假设你从未存储明文用户帐户密码,因为这确实是一件可怕的事情。因此,您不再拥有创建新密码摘要所需的数据


我想你需要每个人更新他们的密码。

可能还有其他更快、更有效的方法,但如果你想在不影响用户的情况下更新密码,我会这样做-

将另一列添加到表中,这是一个可以为真或假的基本标志。默认为false。然后实现以下伪代码:

if(flag=true)
{
 use crypt() and authenticate user
}
else
{
use hash() and authenticate user
use crypt() on the provided password (once authenticated)
update the record to put the new password into the table
set flag=true
}
本质上,它检查密码是否更新,如果没有更新,则更新密码。一旦用户完成转换,您最终可以关闭此功能。但由于它几乎不增加任何负载,我建议保留它


这有点迂回,但它将为您的用户做最少的工作,它将在后台运行,而不会给他们任何发生的迹象

可能还有其他更快、更有效的方法来实现这一点,但如果您想在不影响用户的情况下实现这一点,我会这样做-

将另一列添加到表中,这是一个可以为真或假的基本标志。默认为false。然后实现以下伪代码:

if(flag=true)
{
 use crypt() and authenticate user
}
else
{
use hash() and authenticate user
use crypt() on the provided password (once authenticated)
update the record to put the new password into the table
set flag=true
}
本质上,它检查密码是否更新,如果没有更新,则更新密码。一旦用户完成转换,您最终可以关闭此功能。但由于它几乎不增加任何负载,我建议保留它


这有点迂回,但它将为您的用户做最少的工作,它将在后台运行,而不会给他们任何发生的迹象

Id说使用一个标记字段来注释以前对哪些用户进行了散列,然后对现有散列进行加密。对于在标记字段中有true的任何人,当验证密码成为一个两步过程时,对密码进行散列,然后对其进行加密以进行匹配检查


每当他们更新密码时,您都会将标记字段设置为false。i、 e.分阶段进入并加密以进行匹配检查。

我想说,使用标记字段来注释哪些用户之前已被哈希,然后对现有哈希进行加密。对于在标记字段中有true的任何人,当验证密码成为一个两步过程时,对密码进行散列,然后对其进行加密以进行匹配检查


每当他们更新密码时,您都会将标记字段设置为false。i、 e.分阶段进入并仅加密以进行匹配检查。

是的,您需要做的是添加一个额外的列来存储
crypt()
输出。当用户登录并成功地将其密码
hash()转换为数据库中的密码时,您现在可以
crypt()
该密码,并从数据库中删除旧的
hash


这仅在用户登录时有效,因此您将有一段时间,其中一些用户使用旧系统,而一些用户使用新系统

是的,您需要做的是添加一个额外的列来存储
crypt()
输出。当用户登录并成功地将其密码
hash()转换为数据库中的密码时,您现在可以
crypt()
该密码,并从数据库中删除旧的
hash


这仅在用户登录时有效,因此您将有一段时间,其中一些用户使用旧系统,而一些用户使用新系统

这里有一个可能的解决方案:

向用户表中添加一列,以指示对用户密码使用了哪种哈希方法。在登录时,您将知道用户的密码,因为他刚刚输入了密码,所以一旦通过了当前哈希,就可以从密码中提取一个新密码并更新标志列

这假设您正在通过internet传递免费文本密码,除非您使用SSL,否则不应该这样做

或者,如果要在发送密码之前对客户端上的密码进行散列,请更新客户端软件以处理两种散列算法并同时发送这两种算法。使用您的标志标识要检查的对象


在这两种情况下,一旦您的所有(或大多数)用户都切换了,就删除旧的散列并强制其余用户解决问题。

以下是一种可能的解决方案:

向用户表中添加一列,以指示对用户密码使用了哪种哈希方法。在登录时,您将知道用户的密码,因为他刚刚输入了密码,所以一旦通过了当前哈希,就可以从密码中提取一个新密码并更新标志列

这假设您正在通过internet传递免费文本密码,除非您使用SSL,否则不应该这样做

或者,如果要在发送密码之前对客户端上的密码进行散列,请更新客户端软件以处理两种散列算法并同时发送这两种算法。使用您的标志标识要检查的对象

在这两种情况下,一旦您的所有(或大多数)用户都切换了,就删除旧的散列并强制其余用户解决问题。

您应该使用then。当你移动到5.5时,它将使你更容易

不请自来地重新散列