为什么PHP中的CRYPT_BLOWFISH被认为更好,因为它产生的哈希值比SHA短

时间:2013-04-15 11:42:15

标签: php sha blowfish crypt

为什么PHP中的CRYPT_BLOWFISH被认为更适合密码散列,当它产生比CRYPT_SHA-256/512更短的散列时?是不是更有可能找到另一个计算相同BLOWFISH散列的单词,而不是SHA256 / 512散列?

来自php.net手册的示例哈希:

Blowfish: $2a$07$usesomesillystringfore2uDLvp1Ii2e./U9C8sBjqp8I90dH6hi
SHA-256:  $5$rounds=5000$usesomesillystri$KqJWpanXZHKq2BOB43TSaYhEWsQ1Lr5QNyPCDH/Tp.6
SHA-512:  $6$rounds=5000$usesomesillystri$D4IrlXatmP7rx3P3InaxBeoomnAihCKRVQP22JZ6EY47Wc6BkroIuUUBOov1i.S5KPgErtP/EN5mcO.ChWQW21

1 个答案:

答案 0 :(得分:2)

使用bcrypt使其安全的事情是它的计算速度比任何其他算法慢得多。

使用SHA版本,您可以获得更好的计算机,并且您将能够立即制作彩虹表。使用bcrypt它仍然需要很长时间,这个算法是时间昂贵的。因此几乎不可能从散列中检索原始密码。

您可以看到此link for more information。 您还可以从Security StackExchange中看到this thread,它涵盖了它!


关于哈希产品较小的事实,它根本不重要,因为正如我所说,如果你想找到哈希来自哪个密码,它需要很长时间。

this sandbox。只需将负载系数超过15即可使执行时间超过3秒。试着玩它,你会明白为什么它是安全的。

沙箱中的代码:

$time = microtime(true);
$pass =  crypt('myNewPassword', '$2y$15$usesomesillystringforsalt$');
$end_time = microtime(true);

$diff = $end_time - $time;
echo "$pass\n$diff"

输出:

  

$ 2Y $ 15 $ usesomesillystringforeTfp6 / FuUgyb1HKFA36V9tf6Go5xlv /一个
      2.4688489437103

1个哈希需要2.5秒!想象一下,试图破解数以百万计的密码!