all

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

发布于 2022-04-11 13:30:14

我想在数据库中存储一个散列密码(使用 BCrypt)。什么是一个好的类型,哪个是正确的长度?使用 BCrypt 散列的密码是否总是相同的长度?

编辑

示例哈希:

$2a$10$KssILxWNR6k62B7yiX0GAe2Q7wwHlrzhF3LqtVvpyvHZf0MwvNfVu

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

编辑 2

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

关注者
0
被浏览
21
1 个回答
  • 面试哥
    面试哥 2022-04-11
    为面试而生,有面试问题,就找面试哥。

    bcrypt 的模块化 crypt 格式包括

    • $2$$2a$$2y$识别散列算法和格式
    • 表示成本参数的两位数,后跟$
    • 一个 53 个字符长的 base-64 编码值(它们使用不同于标准 Base 64 编码字母的字母表., /, ” , ” , ” ),包括: 0``9``A``Z``a``z
      • 22 个 salt 字符(实际上只有 132 个解码位中的 128 个位)
      • 31 个字符的加密输出(实际上只有 186 个解码位中的 184 个位)

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

    当您使用 2a 格式时,您需要 60 个字节。因此对于 MySQL,我建议使用CHAR(60) BINARYorBINARY(60)(有关差异的信息,请参阅The __bin_ 和 binary
    Collat

    ​​ions )。

    CHAR不是二进制安全的,相等性不仅仅取决于字节值,还取决于实际的排序规则;在最坏的情况下A被视为等于a。有关详细信息,请参阅The_binbinaryCollat​​ions



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看