4

为什么 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
4

1 回答 1

2

bcrypt 的安全性在于它的计算速度比任何其他算法都要慢得多。

使用任何 SHA 版本,您都可以获得更好的计算机,并且您将能够立即制作彩虹表。使用 bcrypt 仍然需要很长时间,这种算法很耗时。因此,几乎不可能从哈希中检索原始密码。

您可以查看此链接以获取更多信息。您还可以从全面涵盖它的 Security StackExchange 中看到这个线程!


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

请参阅此沙箱。只需将负载因子设置为超过 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/a
2.4688489437103

1 个哈希需要 2.5 秒!想象一下尝试散列数百万个密码!

于 2013-04-15T11:58:13.630 回答