为什么 bcrypt() 哈希应该存储在 (var)binary 中?

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

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

bcrypt 哈希 should be storedBINARYVARBINARY (MySQL).

如果比较 and/or 搜索是在数据库内部完成的,我完全理解这个要求。 (整理,区分大小写与不区分大小写)。

如果数据库只用作存储,并且在php应用程序上与password_verify()进行比较,我们可以继续使用CHARVARCHAR吗?

如果不是,为什么?

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

y$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a

当然,这些是区分大小写的,但它们只会使用常规字母、数字和 select 一些语法。

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