为什么 bcrypt() 哈希应该存储在 (var)binary 中?
Why should a bcrypt() hash be stored in (var)binary?
在我们的 php 应用程序中,我们使用 password_hash()
(使用 bcrypt)生成密码哈希。
bcrypt 哈希 should be stored 在 BINARY
或 VARBINARY
(MySQL).
如果比较 and/or 搜索是在数据库内部完成的,我完全理解这个要求。 (整理,区分大小写与不区分大小写)。
如果数据库只用作存储,并且在php应用程序上与password_verify()
进行比较,我们可以继续使用CHAR
或VARCHAR
吗?
如果不是,为什么?
您可以存储 password_hash()
的结果是您可以在普通 VARCHAR(255)
列中保存的内容,它不是二进制数据,只是一个看起来像这样的字符串:
y$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a
当然,这些是区分大小写的,但它们只会使用常规字母、数字和 select 一些语法。
此列不需要建立索引,事实上这几乎没有任何意义。 password_verify()
函数针对特定密码工作,并且故意很慢,针对系统中的每个用户进行测试将花费很长时间。这是为了让人们更难暴力猜测密码。
在我们的 php 应用程序中,我们使用 password_hash()
(使用 bcrypt)生成密码哈希。
bcrypt 哈希 should be stored 在 BINARY
或 VARBINARY
(MySQL).
如果比较 and/or 搜索是在数据库内部完成的,我完全理解这个要求。 (整理,区分大小写与不区分大小写)。
如果数据库只用作存储,并且在php应用程序上与password_verify()
进行比较,我们可以继续使用CHAR
或VARCHAR
吗?
如果不是,为什么?
您可以存储 password_hash()
的结果是您可以在普通 VARCHAR(255)
列中保存的内容,它不是二进制数据,只是一个看起来像这样的字符串:
y$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a
当然,这些是区分大小写的,但它们只会使用常规字母、数字和 select 一些语法。
此列不需要建立索引,事实上这几乎没有任何意义。 password_verify()
函数针对特定密码工作,并且故意很慢,针对系统中的每个用户进行测试将花费很长时间。这是为了让人们更难暴力猜测密码。