我正在处理的登录表单现在使用用户电子邮件地址和密码登录。所以我在想,为什么我不应该在电子邮件地址上使用bcrypt呢?
$email_hash = password_hash($email, PASSWORD_DEFAULT);
我知道它是用于密码的,那又如何呢?也应该适用于电子邮件...如果使用电子邮件登录,是否不应该像密码一样对哈希进行散列/加盐处理?我知道这不是标准做法,但从不了解原因。
我不一定需要知道用户的电子邮件地址。我的意思是,这并不是说我要和他们聊天。也许当用户被禁止时,我应该通过电子邮件通知他们,但为什么要一开始就告知非法行为。
您需要电子邮件地址来查找用户记录。
通常,您会执行以下操作:
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在哈希中包含盐。
来自维基百科:
例如,[bcrypt hash] $ 2a $ 10 $ N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy指定成本参数10,表示进行了210次密钥扩展。盐为N9qo8uLOickgx2ZMRZoMye,所得哈希为IjZAgcfl7p92ldGxad68LJZdL17lhWy。
或从PHP docs:
请注意,password_hash()返回算法,成本和盐值作为返回的哈希值的一部分。因此,其中包含了验证哈希所需的所有信息。这允许验证功能验证哈希,而无需单独存储盐或算法信息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句