gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 12:48:00 25 4
gpt4 key购买 nike

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

编辑

示例哈希:

$2a$10$KssILxWNR6k62B7yiX0GAe2Q7wwHlrzhF3LqtVvpyvHZf0MwvNfVu

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

编辑 2

抱歉没有提到实现。我正在使用 jBCrypt .

最佳答案

bcrypt 的模块化 crypt 格式包括

  • $2$$2a$$2y$ 标识 hashing algorithm and format
  • 表示成本参数的两位数,后跟 $
  • 一个 53 个字符长的 base-64 编码值(它们使用字母表 ./09, AZ, azstandard Base 64 Encoding 字母表不同)组成的:
    • 22 个盐字符(实际上只有 132 个解码位中的 128 位)
    • 31 个字符的加密输出(实际上只有 186 个解码位中的 184 个位)

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

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

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

关于mysql - 我应该使用什么列类型/长度将 Bcrypt 散列密码存储在数据库中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5881169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com