使用password_hash时生成的哈希的最大长度?

时间:2014-01-31 12:03:25

标签: php password-encryption

我正在使用

password_hash($password, PASSWORD_BCRYPT);

用于存储数据库的crypt密码。正如我所读到的,对生成的哈希没有长度限制,但我需要限制在我的数据库上创建一个字段可以适合所有密码(在最坏的情况下)。 如果我在纯文本中输入密码限制为20个字符,那么password_hahs()结果将如何变长?

2 个答案:

答案 0 :(得分:18)

来自password_hash documentation

  

目前支持以下算法:

     

PASSWORD_DEFAULT - 使用bcrypt算法(默认自PHP 5.5.0起)。   请注意,此常量旨在随着时间的推移而变化为新的和   PHP中添加了更强大的算法。出于这个原因,长度   使用此标识符的结果可能会随时间而变化。的因此,   建议将结果存储在可以的数据库列中   超过60个字符(255个字符将是一个不错的选择)。

     

PASSWORD_BCRYPT - 使用CRYPT_BLOWFISH算法创建哈希值。   这将使用“$ 2y $”生成标准的crypt()兼容哈希   标识符。 结果将始终为60个字符的字符串,或者为FALSE   失败。

因此,使用PASSWORD_BCRYPTpassword_hash的结果将为60个字符的字符串。

答案 1 :(得分:2)

BCrypt的结果将始终是60个字符的字符串。无限只是函数的输入,这意味着您不会(也不应该)对输入的密码设置限制。

实际上BCrypt内部只使用了大约72个字符,但它接受任意长度的密码。

如果你想在未来的证明形式中使用这个功能(请注意PASSWORD_DEFAULT)......

password_hash($password, PASSWORD_DEFAULT);

...然后你应该让你的数据库字段更大。较新的PHP版本可能会将BCrypt替换为另一种默认哈希算法,这可能会产生更长的哈希值。