我想在数据库中存储一个散列密码(使用 BCrypt)。什么是一个好的类型,哪个是正确的长度?使用 BCrypt 散列的密码是否总是相同的长度?
编辑
示例哈希:
$2a$10$KssILxWNR6k62B7yiX0GAe2Q7wwHlrzhF3LqtVvpyvHZf0MwvNfVu
在对一些密码进行哈希处理后,BCrypt 似乎总是生成 60 个字符的哈希值。
编辑 2
抱歉没有提到实现。我正在使用 jBCrypt .
最佳答案
bcrypt 的模块化 crypt 格式包括
$2$
、$2a$
或$2y$
标识 hashing algorithm and format- 表示成本参数的两位数,后跟
$
- 一个 53 个字符长的 base-64 编码值(它们使用字母表
.
、/
、0
–9
,A
–Z
,a
–z
与 standard Base 64 Encoding 字母表不同)组成的:- 22 个盐字符(实际上只有 132 个解码位中的 128 位)
- 31 个字符的加密输出(实际上只有 186 个解码位中的 184 个位)
因此总长度分别为 59 或 60 个字节。
当您使用 2a 格式时,您需要 60 个字节。因此对于 MySQL,我建议使用 CHAR(60) BINARY
or BINARY(60)
(有关差异的信息,请参阅 The _bin and binary Collations)。
CHAR
不是二进制安全的,相等性不仅仅取决于字节值,还取决于实际的排序规则;在最坏的情况下,A
被视为等于 a
。见 The _bin
and binary
Collations了解更多信息。
关于mysql - 我应该使用什么列类型/长度将 Bcrypt 散列密码存储在数据库中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5881169/