代码之家  ›  专栏  ›  技术社区  ›  Dereleased

使用PHP的crypt的河豚盐的正确格式是什么?

  •  15
  • Dereleased  · 技术社区  · 14 年前

    我已经阅读了网站上提供的信息 PHP Manual Entry for crypt() ,但我发现自己仍然不确定salt触发河豚算法的格式。

    根据手动输入,我应该使用“$2$”或“$2a$”作为16个字符字符串的开头。但是,在后面给出的示例中,它们使用了更长的字符串:' $2a$07$usesomesillystringforsalt$ ,这向我表明,我提供的任何字符串都将被切割以适合模型。

    我遇到的问题实际上是触发河豚算法vs STD_DES . 例子:

    $foo = 'foo';
    $salt = '$2a$' . hash('whirlpool', $foo); // 128 characters, will be truncated
    $hash = crypt($foo, $salt); 
    // $hash = $26HdMTpoODt6
    

    这种杂烩显然不是漩涡,事实上是 标准\u DES $2a$07$

    $foo = 'foo';
    $salt = '$2a$' . hash('whirlpool', $foo); // 128 characters, will be truncated
    $hash = crypt($foo, $salt); 
    // $hash = $2a$07$b1b2ee48991281a439da2OHi1vZF8Z2zIA.8njYZKR.9iBehxLoIC
    

    我注意到我可以提供一些字符的变化,这里显示为' 07$ 04$ 15$ 两个都有用,但是 01$ 通过 03$ 不工作(生成空白字符串),以及 99$ 85$ 使其恢复为 标准\u DES 再一次。

    下面这三个字的意义是什么 $2a$ '字符串,正如我在手册中所相信的,它指示crypt函数使用blowfish方法。

    2a美元$ "应该足以指导 地穴() 使用河豚法;那么,以下三个角色的意义是什么?那么,如果这三个字符如此重要,salt的正确格式是什么?

    1 回复  |  直到 4 年前
        1
  •  15
  •   Community basarat    7 年前

    后面的数字 2a 指定要执行的轮数的log2。例如,10表示执行1024轮。通常,10是正常的。不要使用太大的数字,否则您的密码将永远无法验证。

    看见 Why does BCrypt.net GenerateSalt(31) return straight away?