【问题标题】:PHP bcrypt gives really short output for some reason由于某种原因,PHP bcrypt 提供了非常短的输出
【发布时间】:2016-07-07 22:35:02
【问题描述】:

https://alias.io/2010/01/store-passwords-safely-with-php-and-mysql/

我正在按照本教程在我的网站上创建一个登录系统,但是当我尝试使用 bcrypt 对密码进行哈希处理时,如教程中所示,由于某种原因,输出确实很短。

输入密码示例:gf45_gdf#4hg

盐示例:$2a$20$wEJ27V9qx.HWP68SNLcF7w==

示例输出哈希:$2l6f23nreXR6

我觉得这真的很容易暴力破解,与网上一些很长的输出相比,这里是代码:

$cost = 10;
$salt = strtr(base64_encode(mcrypt_create_iv(16, MCRYPT_DEV_URANDOM)), '+', '.');
$salt = sprintf("$2a$%02d$", $cost) . $salt;
$hash = crypt($password, $salt);

有人知道如何增加哈希的长度吗?

【问题讨论】:

  • 当您可以使用 password_hash() 并让它完成所有繁重的工作时,为什么还要这样做?
  • 我不能使用 password_hash() 因为我在一个只允许我使用 PHP 5.2 的免费主机上运行我的网站
  • 可能可以使用这个反向移植:github.com/ircmaxell/password_compat 这取决于您主机的 PHP 包是如何构建的。
  • 你觉得免费交易安全好吗?
  • @zaph 不,但我是一名高中生,我没有有效的货币收入。我很想购买一台虚拟机并尝试使用 node.js,但我不能,所以我必须使用我可用的东西。

标签: php hash bcrypt


【解决方案1】:

根据手册:http://php.net/manual/en/function.crypt.php 如果出错,它将返回一个“少于 13 个字符且保证与盐不同的字符串”。那可能是怎么回事?
尝试检查系统上的 CRYPT_BLOWFISH == 1。

或者只使用 password_hash() 因为它应该为您处理盐生成。

【讨论】:

  • 我检查了 CRYPT_BLOWFISH 实际上是 0,但我不能使用 password_hash() 因为我的免费主机只允许我使用 PHP 5.2。
  • 看起来您正在使用河豚盐 $2a$...。如果不支持 CRYPT_BLOWFISH,那将不起作用。
  • 好吧,我该怎么办?
  • 如果河豚不可用,您可能不得不使用另一种算法。 SHA512 看起来是次佳的。为此,您可以像 "$6$rounds=5000$".salt_here 那样构建您的盐,无论您想要多少轮。如果这也不起作用,那么您可能无法获得出色的安全性,请尝试另一台服务器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-06
  • 2021-03-01
  • 1970-01-01
  • 2022-12-09
  • 2019-07-29
  • 2010-11-02
  • 2017-04-06
相关资源
最近更新 更多