为什么bcrypt()哈希应该存储在(var)二进制中


Why should a bcrypt() hash be stored in (var)binary?

在我们的php应用程序中,我们使用password_hash()生成密码哈希(使用bcrypt)。

bcrypt 哈希应该存储在 BINARYVARBINARY (MySQL) 中。

如果在数据库中进行比较和/或搜索,我完全理解此要求。(排序规则,区分大小写与不区分大小写)。

如果数据库仅用作存储,并且比较是在php应用程序上完成的,则可以使用password_verify(),则可以保留CHAR还是VARCHAR

如果没有,为什么?

你可以存储的结果 password_hash() 是你可以保存在普通VARCHAR(255)列中的东西,它不是二进制数据,只是一个字符串,看起来像:

$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a

当然,这些区分大小写,但它们除了常规字母、数字和少数语法之外,永远不会使用任何东西。

此列不需要索引,事实上这几乎没有意义。password_verify()功能针对特定密码工作,并且故意很慢,针对系统中的每个用户进行测试需要很长时间。这是为了使人们更难暴力猜测密码。