在我们的php应用程序中,我们使用password_hash()
生成密码哈希(使用bcrypt)。
bcrypt 哈希应该存储在 BINARY
或 VARBINARY
(MySQL) 中。
如果在数据库中进行比较和/或搜索,我完全理解此要求。(排序规则,区分大小写与不区分大小写)。
如果数据库仅用作存储,并且比较是在php应用程序上完成的,则可以使用password_verify()
,则可以保留CHAR
还是VARCHAR
?
如果没有,为什么?
你可以存储的结果 password_hash()
是你可以保存在普通VARCHAR(255)
列中的东西,它不是二进制数据,只是一个字符串,看起来像:
$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a
当然,这些区分大小写,但它们除了常规字母、数字和少数语法之外,永远不会使用任何东西。
此列不需要索引,事实上这几乎没有意义。password_verify()
功能针对特定密码工作,并且故意很慢,针对系统中的每个用户进行测试需要很长时间。这是为了使人们更难暴力猜测密码。