登录表单我现在正在使用用户电子邮件地址和密码登录。 所以我在想,是否有任何理由我不想在电子邮件地址上使用bcrypt:
$email_hash = password_hash($email, PASSWORD_DEFAULT);
我知道它用于密码,但那又怎样?也应该处理电子邮件...如果使用电子邮件登录,不应该像密码一样进行哈希/腌制吗?我知道这不是标准做法,但从未理解为什么。
我不一定需要知道用户的电子邮件地址。我的意思是,我不喜欢和他们聊天。也许当用户被禁止时,我应该通过电子邮件通知他们,但为什么要首先告知不法分子。
答案 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或算法信息单独存储。