我正在使用
password_hash($password, PASSWORD_BCRYPT);
用于存储数据库的crypt密码。正如我所读到的,对生成的哈希没有长度限制,但我需要限制在我的数据库上创建一个字段可以适合所有密码(在最坏的情况下)。 如果我在纯文本中输入密码限制为20个字符,那么password_hahs()结果将如何变长?
答案 0 :(得分:18)
来自password_hash
documentation:
目前支持以下算法:
PASSWORD_DEFAULT
- 使用bcrypt算法(默认自PHP 5.5.0起)。 请注意,此常量旨在随着时间的推移而变化为新的和 PHP中添加了更强大的算法。出于这个原因,长度 使用此标识符的结果可能会随时间而变化。的因此, 建议将结果存储在可以的数据库列中 超过60个字符(255个字符将是一个不错的选择)。
PASSWORD_BCRYPT
- 使用CRYPT_BLOWFISH
算法创建哈希值。 这将使用“$ 2y $”生成标准的crypt()兼容哈希 标识符。 结果将始终为60个字符的字符串,或者为FALSE 失败。
因此,使用PASSWORD_BCRYPT
,password_hash
的结果将为60个字符的字符串。
答案 1 :(得分:2)
BCrypt的结果将始终是60个字符的字符串。无限只是函数的输入,这意味着您不会(也不应该)对输入的密码设置限制。
实际上BCrypt内部只使用了大约72个字符,但它接受任意长度的密码。
如果你想在未来的证明形式中使用这个功能(请注意PASSWORD_DEFAULT)......
password_hash($password, PASSWORD_DEFAULT);
...然后你应该让你的数据库字段更大。较新的PHP版本可能会将BCrypt替换为另一种默认哈希算法,这可能会产生更长的哈希值。