使用php password_hash函数更新md5密码

时间:2016-09-09 11:46:59

标签: php mysql pdo

我有一个帐户的数据库仍然使用旧的和不安全的MD5算法,所以我想用php中的password_hash函数更新密码。

我为具有md5密码的用户进行了登录,因此可以通过更新字段提示他们更新密码。一切正常,我在数据库中看到了新的哈希字符串。但是当我想使用他们的新密码登录时,它是不可能的。

我使用PDO更新查询更新密码,是否有人有解决方案或知道这是否可能?

提前致谢, BRAM。

编辑:

这是我用来验证密码的代码。

if (password_verify($password, $rowofusers['passwordhere'])) {
       //code here
      }

1 个答案:

答案 0 :(得分:2)

如上所述,执行此操作的正确方法可以对用户完全透明,并且不需要" 更新密码提示"。

当用户尝试登录时,请执行以下步骤以相应地修改登录过程。

  1. 检查数据库中的哈希值是否以$2y$开头,以确定是否应使用md5password_verify检查密码。如果确实以$2y$开头,则只需使用password_verify并忽略其余步骤(继续正常登录过程的其余部分)。
  2. 如果数据库中的密码哈希不是以$2y$开头,那么首先检查纯文本密码与其md5哈希值。
  3. 如果明文密码的哈希值与数据库中的md5哈希值不匹配,请继续执行正常的身份验证失败过程并忽略此处的其余步骤
  4. 如果纯文本密码的散列 匹配数据库中的md5散列,请使用纯文本密码并通过password_hash运行它使用password_hash
  5. 中新生成的BCRYPT哈希值更新数据库

    您必须在登录过程中保留此代码,直到数据库中的所有密码都已更新,并且没有剩余的md5哈希值。用户永远不会知道他们的密码哈希被更新,并且永远不会被提示输入他们的密码两次,因为它完全没必要。