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