【发布时间】:2010-02-09 07:40:27
【问题描述】:
我已阅读 PHP Manual Entry for crypt() 上提供的信息,但我发现自己仍然不确定触发 Blowfish 算法的盐的格式。
根据手动输入,我应该使用 '$2$' 或 '$2a$' 作为 16 个字符的字符串的开头。但是,在后面给出的示例中,他们使用了更长的字符串:'$2a$07$usesomesillystringforsalt$',这表明我提供的任何字符串都将被切片和切块以适合模型。
我遇到的问题实际上是触发 Blowfish 算法 vs STD_DES。示例:
$foo = 'foo';
$salt = '$2a$' . hash('whirlpool', $foo); // 128 characters, will be truncated
$hash = crypt($foo, $salt);
// $hash = $26HdMTpoODt6
该哈希显然不是漩涡,实际上是STD_DES,只有盐的前两个字符用于盐。但是,在 PHP 手册的示例中,他们的 salt 以“$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$ 等值会导致它再次恢复为STD_DES。
问题:
'$2a$' 字符串后面的这三个字符的意义是什么,正如我被手册所引导的那样,指示 crypt 函数使用河豚方法。
根据手册,'$2a$'应该足以指示crypt()使用河豚方法;那么,以下三个字符的意义是什么?那么,如果这三个字符如此重要,那么盐的正确格式是什么?
【问题讨论】:
标签: php hash salt blowfish crypt