我正在使用
password_hash($password, PASSWORD_BCRYPT);
为了将密码加密并存储在数据库中,我阅读了一些资料。据我所知,生成的哈希值没有长度限制,但我需要知道最大长度,以便在数据库中定义一个字段,该字段可以容纳所有密码哈希值(在最坏的情况下)。
如果我将明文密码的限制设置为20个字符,那么password_hash()
函数的结果会有多长?
我正在使用
password_hash($password, PASSWORD_BCRYPT);
为了将密码加密并存储在数据库中,我阅读了一些资料。据我所知,生成的哈希值没有长度限制,但我需要知道最大长度,以便在数据库中定义一个字段,该字段可以容纳所有密码哈希值(在最坏的情况下)。
如果我将明文密码的限制设置为20个字符,那么password_hash()
函数的结果会有多长?
password_hash
文档中得知:PASSWORD_DEFAULT
- 使用bcrypt算法 (自PHP 5.5.0起默认)。请注意,此常量旨在随着时间的推移而更改,以添加新的更强大的算法到 PHP 中。因此,使用此标识符导致的结果的长度随时间可能会发生变化。因此,建议将结果存储在可以扩展到超过60个字符(255个字符是一个不错的选择)的数据库列中。
PASSWORD_BCRYPT
- 使用CRYPT_BLOWFISH
算法创建散列值。这将生成一个标准的crypt()兼容哈希,使用"$2y$"标识符。结果将始终是一个60个字符的字符串,或失败时为FALSE。PASSWORD_BCRYPT
,password_hash
的结果将为60个字符的字符串。password_hash()
在发生错误时不再返回 FALSE(这已经在官方文档中说明)。 - webcoder.co.ukpassword_hash($password, PASSWORD_DEFAULT);
VARCHAR(255)
类型的字段用于存储密码。password_hash
当前生成了一个长度为 60 的哈希值,需要存储该值,但如果底层算法发生变化,哈希值的长度也可能会发生改变。哈希值的长度不会受密码长度的影响,但为什么要将密码限制在 20 个字符以内呢? - Mark BakerPASSWORD_BCRYPT
或PASSWORD_DEFAULT
=> 60。PASSWORD_ARGON2I
=> 约为96(取决于time_cost
和memory_cost
)。PASSWORD_ARGON2ID
=> 约为97(取决于time_cost
和memory_cost
)。 - vee