PHP:将MD5哈希应用升级为bcrypt。这个安全吗?

4
抱歉,如果已经有人提出了同样的问题,请原谅我的重复。问题是,我正在尝试将我的旧版PHP应用程序升级到更安全的密码哈希值。目前我使用MD5,但我想使用new password_hash()函数来使用bycript。我想到了一种方法,但我不知道它是否真的安全。这是一个简化的代码:
if (password_verify($input_password, $user->password hash) === false) {
    if (md5($input_password) === $user->password_hash) {
        user->password_hash = password_hash(
            $input_password,
            $currentHashAlgoritm,
            $currentHashOptions
        );
        $user->save;
    } else {
        throw new Exception('Invalid Password');
    }
}
//Save login status to session

基本上,我想做的是在初始检查失败但MD5检查成功时重新生成密码。但是,如果有人输入了错误的密码并且:
md5($bad_password) == $user->password_hash (hashed by bycript)

用户输入错误密码的可能性非常小。

这是唯一的方式吗?还是有其他更好的方法?感谢所有人。对于糟糕的英语,我很抱歉。


只是一个想法:如果存储的哈希已经进行了bcrypt哈希,是否可以添加一些指示器? - dbarthel
1个回答

4

不,没问题,因为PHP的password_hash在返回的哈希中包含了识别算法、成本和盐的编码,并且它使用的字符永远不会出现在md5哈希中,后者仅为十六进制。

因此,md5($bad_password)永远不可能与password_hash的结果相同(看一下这些值;password_hash的bcrypt将以"$2y$"开头,而"$"和"y"都永远不会出现在md5哈希中。"$2y$"表示密码是模块化加密格式的bcrypt哈希。)


谢谢,我不知道那个。 - Perez Sebastián

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接