有什么理由不在电子邮件地址上使用bcrypt吗?

时间:2016-04-21 20:54:00

标签: php security login bcrypt

登录表单我现在正在使用用户电子邮件地址和密码登录。 所以我在想,是否有任何理由我不想在电子邮件地址上使用bcrypt:

$email_hash = password_hash($email, PASSWORD_DEFAULT);

我知道它用于密码,但那又怎样?也应该处理电子邮件...如果使用电子邮件登录,不应该像密码一样进行哈希/腌制吗?我知道这不是标准做法,但从未理解为什么。

我不一定需要知道用户的电子邮件地址。我的意思是,我不喜欢和他们聊天。也许当用户被禁止时,我应该通过电子邮件通知他们,但为什么要首先告知不法分子。

1 个答案:

答案 0 :(得分:4)

您需要电子邮件地址才能查找用户记录。

通常你会这样做:

function create_account(email, password) {
    var pwhash = password_hash($password, PASSWORD_BCRYPT);
    // insert into users values ($email, $pwhash);
}

function login(email, password) {
    // select pwhash from users where email = $email;
    return password_verify($password, $pwhash); // true or false
}

password_hash($email)将始终返回不同的值,因为bcrypt在哈希中包含一个salt。

来自wikipedia

  

例如,[bcrypt hash] $ 2a $ 10 $ N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy指定成本参数10,表示210次密钥扩展轮次。盐是N9qo8uLOickgx2ZMRZoMye,结果哈希是IjZAgcfl7p92ldGxad68LJZdL17lhWy。

或来自PHP docs

  

请注意,password_hash()返回算法,cost和salt作为返回哈希的一部分。因此,验证散列所需的所有信息都包含在其中。这允许验证函数验证散列,而无需为salt或算法信息单独存储。