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