我应该使用什么列类型/长度来在数据库中存储 Bcrypt 哈希密码?

2024-01-08

我想在数据库中存储散列密码(使用 BCrypt)。哪种类型比较合适,哪种长度合适?使用 BCrypt 散列的密码是否始终具有相同的长度?

EDIT

哈希示例:

$2a$10$KssILxWNR6k62B7yiX0GAe2Q7wwHlrzhF3LqtVvpyvHZf0MwvNfVu

对一些密码进行哈希处理后,BCrypt 似乎总是生成 60 个字符的哈希值。

EDIT 2

抱歉没有提及实施情况。我在用jBCrypt http://www.mindrot.org/projects/jBCrypt/.


bcrypt 的模块化 crypt 格式包括

  • $2$, $2a$ or $2y$识别哈希算法和格式 https://en.wikipedia.org/wiki/Bcrypt#Versioning_history
  • 表示成本参数的两位数值,后跟$
  • a 53 characters long base-64-encoded value (they use the alphabet ., /, 09, AZ, az that is different to the standard Base 64 Encoding https://www.rfc-editor.org/rfc/rfc4648#section-4 alphabet) consisting of:
    • 22 个盐字符(实际上仅 132 个解码位中的 128 位)
    • 加密输出的 31 个字符(实际上只有 186 个解码位中的 184 位)

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

当您使用 2a 格式时,您将需要 60 个字节。因此对于 MySQL 我建议使用CHAR(60) BINARYor BINARY(60) https://dev.mysql.com/doc/refman/5.5/en/binary-varbinary.html (see The _bin and binary校对 http://dev.mysql.com/doc/refman/5.5/en/charset-binary-collations.html有关差异的信息)。

CHAR不是二进制安全的,并且相等性不仅仅取决于字节值,还取决于实际的排序规则;在最坏的情况下A被视为等于a. See The _bin and binary校对 https://dev.mysql.com/doc/refman/5.6/en/charset-binary-collations.html了解更多信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我应该使用什么列类型/长度来在数据库中存储 Bcrypt 哈希密码? 的相关文章

随机推荐