Php 使用密码\u散列时生成的散列的最大长度?

Php 使用密码\u散列时生成的散列的最大长度?,php,password-encryption,Php,Password Encryption,我正在使用 password_hash($password, PASSWORD_BCRYPT); 加密要存储在数据库中的密码。正如我所读到的,对生成的哈希没有长度限制,但是我需要知道最大长度,这样我就可以使用它来定义数据库中可以容纳所有密码哈希的字段(在最坏的情况下) 如果我将明文密码限制为20个字符,则密码\u hash()结果将持续多长时间?来自: 目前支持以下算法: PASSWORD\u DEFAULT-使用bcrypt算法(从PHP 5.5.0开始默认)。 请注意,该常数设计为随着时间

我正在使用

password_hash($password, PASSWORD_BCRYPT);
加密要存储在数据库中的密码。正如我所读到的,对生成的哈希没有长度限制,但是我需要知道最大长度,这样我就可以使用它来定义数据库中可以容纳所有密码哈希的字段(在最坏的情况下)

如果我将明文密码限制为20个字符,则
密码\u hash()
结果将持续多长时间?

来自:

目前支持以下算法:

PASSWORD\u DEFAULT
-使用bcrypt算法(从PHP 5.5.0开始默认)。 请注意,该常数设计为随着时间的推移而变化,如新的和 PHP中添加了更强大的算法。由于这个原因,这条河的长度 使用此标识符的结果可能会随时间变化因此, 建议将结果存储在可以 扩展超过60个字符(255个字符将是一个不错的选择)。

PASSWORD\u BCRYPT
-使用
CRYPT\u BLOWFISH
算法创建散列。 这将使用“$2y$”生成与crypt()兼容的标准哈希 标识符结果将始终为60个字符的字符串,或FALSE 一旦失败


因此,使用
PASSWORD\u BCRYPT
,密码散列的结果将是一个60个字符的字符串。

BCRYPT的结果将始终是一个60个字符的字符串。Limitless只是功能的输入,这意味着您不(也不应该)对输入的密码设置限制

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

如果您希望以这种形式使用该函数(请注意默认密码)


…然后您应该使数据库字段变大。较新的PHP版本可能会用另一个默认哈希算法取代BCrypt,这可能会生成更长的哈希。

建议创建
VARCHAR(255)
。。。。password_hash当前创建的哈希值比您需要存储的哈希值多60个字符,但如果基础算法发生更改,该哈希值可能会在将来更改。哈希长度完全不受密码长度的影响,但为什么要将密码限制为20个字符呢?另请参见Openwall(PHPass)。它的便携性和坚固性可抵御多种常见的用户密码攻击。
PASSWORD\u BCRYPT
,或
PASSWORD\u DEFAULT
=>60
PASSWORD\u ARGON2I
=>大约96(取决于
时间成本
内存成本
PASSWORD\u ARGON2ID
=>大约97(取决于
时间成本
内存成本
)。
password_hash($password, PASSWORD_DEFAULT);