我在两个不同的functions.php
区域使用了完全相同的函数两次。
- 一旦进入安装程序-当用户注册。
- 用户登录时,在主脚本中执行两次。
username: admin
password: 12345678
hashed password: $2y$12$$$$$$$$$$$$$$$$$$$$$$.ibwcWrMlgLR7y6B62/Vc8Dc54kecHHe$1$ZQhX9D2d$RexVJ.y2KWpfxMyY0tN9E1
salt: HJsZ4yBWNbGQCw1Yi-7rGBunXym7AEIFatIHhaK_fQgY6I1ecqAEs7eAmJM88Zdn5VpdrKie2CN39~PjqSb3yoPCCzl4q8
vsalt: S2qXSXQUc-
登录输出(相同输入)
username: admin
password: 12345678
hashed password: *0S2k0u9.1hnFr.
salt: HJsZ4yBWNbGQCw1Yi-7rGBunXym7AEIFatIHhaK_fQgY6I1ecqAEs7eAmJM88Zdn5VpdrKie2CN39~PjqSb3yoPCCzl4q8
vsalt: S2qXSXQUc-
哈希函数代码function hashing($password ,$salt ,$vsalt){
$check1 = crypt($password.$salt,'$2y$12$'.$vsalt);
$check2 = crypt($password.$salt,$vsalt);
//password will be: $check1.$check2
return($check1.$check2);
}
问题:
散列密码不会完全相同
两件事跳出来:
- 用于Bcrypt的盐具有
[./A-Za-z0-9]
的有限"字母表",因此不应使用连字符。 - salt长度为22个字符。
最后,我的意思是,因为你在Bcrypt中使用盐,所以你真的不需要另一个盐来填充密码。
下面的函数应该可以正常工作:
function hashing($password, $salt, $cost = 12)
{
assert(preg_match('/^[A-Za-z0-9.'/]{22}$/', $salt);
return crypt($password, '$2y$' . str_pad($cost, 2, '0', STR_PAD_LEFT) . '$' . $salt);
}
也就是说,您应该使用自5.5以来包含在核心中的密码哈希API。对于旧版本,您可以使用password compat实现相同的接口。
我的解决方案:
函数:function hashing($password ,$salt ,$vsalt){
$blowFishSalt = '$2y$12$'.$vsalt.$salt.'$';
$check1 = crypt($password.$salt,$blowFishSalt);
//password will be: $check1.$check2
return($check1);
}
返回*0的主要问题(失败代码也可以是:*1):
my blowfish salt: $2y$12$_RANDOM_STRING_
Correct blowfish salt standards: $2y$12$_RANDOM_STRING_$
感谢所有试图帮助我的人!
祝你今天愉快!