我正在尝试验证用户名或电子邮件是否已在注册表单中获取,但我无法理解如何执行此操作,因为两者都在我的数据库中使用password_hash()进行哈希处理,我该如何比较,用户在pdo中输入数据库?请解释我的代码,我是php新手...谢谢,建议您的时间,最好的问候
答案 0 :(得分:2)
如果您的电子邮件使用每个哈希的唯一salt进行哈希处理,则无法测试是否存在任何特定电子邮件,而不是针对数据库中的所有哈希测试针。 E.g:
foreach ($db->query('SELECT email_hash FROM users') as $user) {
if (password_verify($_POST['email'], $user['email_hash'])) {
$found = true;
break;
}
}
没有其他方法,因为你不能在没有单独的盐的情况下重新创建哈希,并且由于你不知道你正在寻找什么样的盐,你只需要完成它们。
如果你要在数据库中哈希需要搜索的数据,至少它不会被腌制。但是,如果它没有被腌制,它对你想要防御的场景提供的保护很少。底线:您需要查询的散列数据非常无意义。