有没有一种方法可以将
我在Crypt Wikipedia页面上读到:“可打印的
因此,我尝试了以下方法(但没有成功):
是否有办法让
MD5
密码转换为可以由 password_verify()
验证的内容?我在Crypt Wikipedia页面上读到:“可打印的
MD5
密码散列值以 $1$
开头。”因此,我尝试了以下方法(但没有成功):
$password = "abcd1234";
$md5hash = "$1$".md5($password);
var_dump(password_verify($password, $md5hash));
是否有办法让
password_verify()
与MD5
密码一起使用?原因是我有一个旧系统,其中密码以MD5
哈希形式存储。我想开始使用更安全的Password Hashing API
。如果我能够将现有的密码哈希转换为适用于password_verify()
的格式,我可以更新数据库条目(在所有密码哈希前加上$1$
),并使用以下代码使程序运行良好(而不必为旧的MD5
密码制作特殊情况):$password; // Provided by user when trying to log in
$hash; // Loaded from database based on username provided by user
if(password_verify($password, $hash)) {
// The following lines will both update the MD5 passwords
// and all passwords whenever the default hashing algorithm is updated
if(password_needs_rehash($hash, PASSWORD_DEFAULT)) {
$hash = password_hash($password, PASSWORD_DEFAULT);
// Store the new hash in database
}
// User is logged in
} else {
// User is not logged in
}
$1$
确实是$md5hash
的一部分,那么什么情况下$password
不需要进行哈希处理呢?提示用户更改密码对我来说不是一个好的选择。如果我找不到问题的解决方案,我将制定一个特殊情况,在该情况下,当$hash
不以$
开头时,将$hash
与md5($password)
进行比较,而不是使用password_verify()
。 - Magnar Myrtveitpassword_verify()
函数将裸密码与哈希值进行比较,而不是比较哈希值。如果哈希值不以$
开头,为什么不使用md5($password)
进行比较?如果成功,使用password_hash
函数对$password
进行哈希并在数据库中更新它。 - frz3993