我正在使用
password_hash($password, PASSWORD_BCRYPT);对密码进行加密以存储在数据库中。据我所知,生成的散列没有长度限制,但我需要知道最大长度,这样我才能在数据库中定义适合所有密码散列的字段(在最坏的情况下)。
如果我将明文密码限制为20个字符,那么password_hash()结果将有多长?
发布于 2014-01-31 20:06:05
目前支持以下算法:
PASSWORD_DEFAULT-使用bcrypt算法(默认为PHP5.5.0)。请注意,此常量旨在随着PHP中添加新的更强大的算法而随着时间的推移而变化。因此,使用此标识符得到的结果的长度可以随时间变化。因此,建议将结果存储在数据库列中,该列可以扩展到超过60个字符(255个字符将是一个不错的选择)。
PASSWORD_BCRYPT -使用CRYPT_BLOWFISH算法创建哈希。这将产生一个使用"$2y$“标识符的标准crypt()兼容散列。如果失败,则结果始终为60个字符的字符串,否则为FALSE。
因此,使用PASSWORD_BCRYPT,password_hash的结果将是一个60个字符的字符串。
发布于 2014-01-31 22:09:59
BCrypt的结果始终是一个60个字符的字符串。Limitless只是函数的输入,这意味着您不(也不应该)对输入的密码设置限制。
实际上,BCrypt在内部仅使用大约72个字符,但它可以接受任何长度的密码。
如果你想像这样使用函数的未来证明形式(注意PASSWORD_DEFAULT)...
password_hash($password, PASSWORD_DEFAULT);...then你应该让你的数据库字段更大。较新的PHP版本可能会用另一个默认散列算法替换BCrypt,这可能会生成更长的散列。
https://stackoverflow.com/questions/21479655
复制相似问题