在您的login.php(?)中,将旧密码从MD5转换为bcrypt,并用新的密码替换数据库中的旧MD5哈希.
伪代码:
$password = $_POST["password"];
if (substr($pwInDatabase, 0, 1) == "$")
{
// Password already converted, verify using password_verify
}
else
{
// User still using the old MD5, update it!
if (md5($password) == $pwInDatabase)
{
$db->storePw(password_hash($password));
}
}
双散列不会增加bcrypt的安全性,因为bcrypt itsef是一种单向散列函数.
注意:MD5产生32个字符长度的字符串,而password_hash()最小值为60.
阅读手册:
如果您决定使用password_hash()或兼容包(如果PHP <5.5)https://github.com/ircmaxell/password_compat/,请务必注意,如果您当前的密码列的长度低于60,则需要将其更改为(或更高).手册建议长度为255.
您需要更改列的长度并重新开始使用新哈希才能使其生效.否则,MySQL将无声地失败.