检查数据库中经过哈希处理的电子邮件地址



我正在处理的网站按password_hash()以散列形式存储电子邮件地址我知道这是为通行证准备的,但该网站已经启动,所以没有回头路了。

现在,当新用户尝试注册时,我需要检查用户正在使用的电子邮件地址是否尚未在数据库中。但是由于所有电子邮件地址都是散列的,我不能简单地使用:

$mail_query = mysql_query("SELECT email FROM userbase WHERE email='$email'");
                    $mail_num = mysql_num_rows($mail_query);
                    if ($mail_num != 0) {
                    $error = 'This email address is already in use.';

有什么办法吗?

该网站使用旧的MySQL api。

唯一的方法,但非常baaaad是获取AAAAALLL电子邮件并检查它们...抱歉,甚至不记得MySQL_*函数,但首先您需要执行这样的查询:

SELECT email FROM userbase

然后,当您收到所有电子邮件时,请在每封电子邮件上循环并使用password_verify......所以在你的循环中,你应该有这样的东西:

if(password_verify($email,$hash)) {
    echo "Email is already in use!";
    break;
}

就是这样。祝你好运。但我不喜欢这样的散列:如果您需要提醒用户密码怎么办?

最新更新