在BCrypt中的password_verify()和password_hash()存在以下问题:
解决方法:在使用password_hash()函数生成哈希时,应该使用BCRYPT算法,并将生成的哈希存储在数据库中。在使用password_verify()函数进行验证时,也需要使用BCRYPT算法。
示例代码:
// 生成哈希
$options = ['cost' => 12];
$hash = password_hash($password, PASSWORD_BCRYPT, $options);
// 存储哈希到数据库
// 验证密码
if (password_verify($password, $hash)) {
echo '密码正确';
} else {
echo '密码错误';
}
解决方法:在使用password_hash()函数生成哈希时,应该指定算法,而不依赖于默认算法。可以使用PASSWORD_DEFAULT常量来表示当前的默认算法。
示例代码:
// 生成哈希
$options = ['cost' => 12];
$hash = password_hash($password, PASSWORD_DEFAULT, $options);
// 存储哈希到数据库
// 验证密码
if (password_verify($password, $hash)) {
echo '密码正确';
} else {
echo '密码错误';
}
解决方法:在生成哈希时,应该根据当前服务器的硬件性能调整成本因子,以提供适当的安全性和性能。
示例代码:
// 生成哈希
$options = ['cost' => 12]; // 根据硬件性能进行调整
$hash = password_hash($password, PASSWORD_BCRYPT, $options);
// 存储哈希到数据库
// 验证密码
if (password_verify($password, $hash)) {
echo '密码正确';
} else {
echo '密码错误';
}
通过以上解决方法,在使用BCrypt中的password_verify()和password_hash()函数时,可以解决可能存在的问题。