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
=>60PASSWORD\u ARGON2I
=>大约96(取决于时间成本
和内存成本
)PASSWORD\u ARGON2ID
=>大约97(取决于时间成本
和内存成本
)。
password_hash($password, PASSWORD_DEFAULT);