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

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

编辑

示例哈希:

$2a$10$KssILxWNR6k62B7yiX0GAe2Q7wwHlrzhF3LqtVvpyvHZf0MwvNfVu

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

编辑2

很抱歉没有提及实施。我正在使用jBCrypt

bcrypt的模块化加密格式包括

  • $2$$2a$$2y$识别哈希算法和格式
  • 表示成本参数的两位数值,后跟$
  • 一个53个字符长的base-64编码值(它们使用不同于标准base-64编码字母表的字母表09aZaZ),包括:
    • salt的22个字符(实际上,132个解码位中只有128位)
    • 加密输出的31个字符(有效地只有186个解码位中的184位)

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

使用2a格式时,需要60个字节。因此,对于MySQL,我建议使用CHAR(60)BINARYBINARY(60)(有关差异的信息,请参阅\u-binBINARY排序规则)

CHAR不是二进制安全的,相等性不仅仅取决于字节值,而是取决于实际的排序规则;在最坏的情况下,A被视为等同于A。有关更多信息,请参阅\u bin二进制排序规则

发表评论