【问题标题】:Why CRYPT_BLOWFISH in PHP is considered better, when it produces shorter hashes than SHA [duplicate]为什么 PHP 中的 CRYPT_BLOWFISH 在产生比 SHA 更短的哈希时被认为更好 [重复]
【发布时间】:2013-04-07 12:20:46
【问题描述】:

当 PHP 中的 CRYPT_BLOWFISH 产生的哈希值比 CRYPT_SHA-256/512 短时,为什么认为 PHP 中的 CRYPT_BLOWFISH 更适合密码哈希?找到另一个计算相同 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

【问题讨论】:

  • 因为它是一个慢得多的算法。这就是你想要的密码散列。

标签: php sha blowfish crypt


【解决方案1】:

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/a
2.4688489437103

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

【讨论】:

    猜你喜欢
    • 2012-01-02
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-17
    • 2012-02-26
    • 2017-09-20
    • 1970-01-01
    相关资源
    最近更新 更多