哈希函数有个奇怪的问题


Weird issue regarding my hashing function

我在两个不同的functions.php区域使用了完全相同的函数两次。

  1. 一旦进入安装程序-当用户注册。
  2. 用户登录时,在主脚本中执行两次。

注册输出
 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);
}

问题:

散列密码不会完全相同

两件事跳出来:

  1. 用于Bcrypt的盐具有[./A-Za-z0-9]的有限"字母表",因此不应使用连字符。
  2. 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_$

感谢所有试图帮助我的人!

祝你今天愉快!