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

时间:2016-04-27 17:55:50

标签: php mysql bcrypt

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

bcrypt在BINARYVARBINARY(MySQL)中哈希should be stored

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

如果数据库仅用作存储,并且使用password_verify()在php应用程序上进行比较,我们可以使用CHAR还是VARCHAR

如果没有,为什么?

1 个答案:

答案 0 :(得分:2)

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

$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a

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

此列不需要编入索引,事实上这几乎没有任何意义。 password_verify()函数针对特定密码工作,故意慢,测试与系统中的每个用户相比需要很长时间。这是为了让人们更难以蛮力猜测密码。