我有一个帐户的数据库仍然使用旧的和不安全的MD5算法,所以我想用php中的password_hash函数更新密码。
我为具有md5密码的用户进行了登录,因此可以通过更新字段提示他们更新密码。一切正常,我在数据库中看到了新的哈希字符串。但是当我想使用他们的新密码登录时,它是不可能的。
我使用PDO更新查询更新密码,是否有人有解决方案或知道这是否可能?
提前致谢, BRAM。
编辑:
这是我用来验证密码的代码。
if (password_verify($password, $rowofusers['passwordhere'])) {
//code here
}
答案 0 :(得分:2)
如上所述,执行此操作的正确方法可以对用户完全透明,并且不需要" 更新密码提示"。
当用户尝试登录时,请执行以下步骤以相应地修改登录过程。
$2y$
开头,以确定是否应使用md5
或password_verify
检查密码。如果确实以$2y$
开头,则只需使用password_verify
并忽略其余步骤(继续正常登录过程的其余部分)。$2y$
开头,那么首先检查纯文本密码与其md5
哈希值。md5
哈希值不匹配,请继续执行正常的身份验证失败过程并忽略此处的其余步骤md5
散列,请使用纯文本密码并通过password_hash
运行它使用password_hash
。您必须在登录过程中保留此代码,直到数据库中的所有密码都已更新,并且没有剩余的md5
哈希值。用户永远不会知道他们的密码哈希被更新,并且永远不会被提示输入他们的密码两次,因为它完全没必要。