PHP:将MD5哈希应用升级到bycript。这样安全吗?

时间:2015-09-26 16:19:38

标签: php hash

很抱歉这是在其他地方被问到的,但我没有找到它。 问题是,我试图将我的遗留PHP应用程序升级为更安全的密码哈希。目前我有MD5,但我想使用新的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)

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

这是唯一的方式还是其他更好的方法?谢谢大家。抱歉英语不好。

1 个答案:

答案 0 :(得分:4)

不,没关系,因为PHP的password_hash包括在其返回的哈希中编码,用于标识算法,成本和盐,并且它使用的字符永远不会是md5哈希,这纯粹是十六进制。

因此,md5($bad_password)永远不会与password_hash的结果相同(请查看值; password_hash的bcrypt将启动“$ 2y $”,而且“$ 2 “nor”y“可以在md5哈希中。”$ 2y $“表示密码是modular crypt format中的bcrypt哈希值。)