很抱歉这是在其他地方被问到的,但我没有找到它。 问题是,我试图将我的遗留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)
用户输入密码错误的可能性很小。
这是唯一的方式还是其他更好的方法?谢谢大家。抱歉英语不好。
答案 0 :(得分:4)
不,没关系,因为PHP的password_hash
包括在其返回的哈希中编码,用于标识算法,成本和盐,并且它使用的字符永远不会是md5哈希,这纯粹是十六进制。
因此,md5($bad_password)
永远不会与password_hash
的结果相同(请查看值; password_hash
的bcrypt将启动“$ 2y $”,而且“$ 2 “nor”y“可以在md5哈希中。”$ 2y $“表示密码是modular crypt format中的bcrypt哈希值。)