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