我想在数据库中存储散列密码(使用BCrypt).什么样的字体比较合适,哪种长度合适?用BCrypt散列的密码是否总是长度相同?

EDIT

示例哈希:

$2a$10$KssILxWNR6k62B7yiX0GAe2Q7wwHlrzhF3LqtVvpyvHZf0MwvNfVu

在对一些密码进行散列后,BCrypt似乎总是生成60个字符的散列.

EDIT 2

很抱歉没有提及实施.我用jBCrypt.

推荐答案

bcrypt的模块化加密格式包括

因此,总长度分别为59或60字节.

使用2a格式时,需要60字节.因此,对于MySQL,我建议使用CHAR(60) BINARYor BINARY(60)(有关差异的信息,请参阅The _bin and binary Collations).

CHAR不是二进制安全的,相等性不仅取决于字节值,还取决于实际的排序规则;在最坏的情况下,A被视为等于a.更多信息请参见The _bin and binary Collations.

Mysql相关问答推荐

我可以在插件中访问SQL密钥对吗?

SQL查询仅插入5行

慢查询日志(log)甚至包括快速查询,因为它包括等待锁定所花费的时间

如何为Oracle DB查询获得所需的GROUP BY结果?

在时间戳上搜索大的MySQL表很慢

MySQL match against给出奇怪的结果

按相关表中的计数和特定值过滤

从 MySQL 8.0.12 升级到 8.0.32 时出错

for each 查询设置 MySQL @@session.time_zone 而不是 CONVERT_TZ 的缺点?

此更新查询是否有任何可能的重写选项?

创建将列与多个值进行比较的索引

MYSQL:如何根据之前的相关记录获取记录

如何在 SQL 的计算列中显示小数点后两位?

PHP,MySQL 错误:列计数与第 1 行的值计数不匹配

在 PHP 中获取 MySQL 列的总和

MySQL函数查找两个日期之间的工作日数

默认为空字符串的列

Sequelize Query 查找日期范围内的所有记录

Python 是否支持 MySQL 准备好的语句?

获取最后一组不同的记录