使用PHP';什么是地窖?

使用PHP';什么是地窖?,php,hash,salt,blowfish,crypt,Php,Hash,Salt,Blowfish,Crypt,我已经阅读了上提供的信息,但我发现自己仍然不确定salt触发河豚算法的格式 根据手动输入,我应该使用“$2$”或“$2a$”作为16个字符字符串的开头。但是,在后面给出的示例中,他们使用了一个更长的字符串:“$2a$07$UseSomesillyStringForAlt$”,这向我表明,我提供的任何字符串都将被切分,以适合模型 我遇到的问题实际上是触发了河豚算法vsSTD_DES。例如: $foo = 'foo'; $salt = '$2a$' . hash('whirlpool', $foo)

我已经阅读了上提供的信息,但我发现自己仍然不确定salt触发河豚算法的格式

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

我遇到的问题实际上是触发了河豚算法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函数使用blowfish方法


根据手册,“
$2a$
”应该足以指导
crypt()
使用河豚法;那么,以下三个角色的意义是什么?那么,如果这三个字符如此重要,salt的正确格式是什么呢?

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


请参阅以获取相关信息。:-)

啊,太好了!这是有道理的,我猜像01-03这样的数字太小,不值得考虑,而像99这样的数字太大,不值得考虑。感谢您的快速回复!来自手动:两位数的成本参数是基础基于河豚的哈希算法计的迭代计数的以2为底的对数,必须在04-31范围内,超出此范围的值将导致crypt()失败。