我想在数据库中存储散列密码(使用 BCrypt)。哪种类型比较合适,哪种长度合适?使用 BCrypt 散列的密码是否始终具有相同的长度?
EDIT
哈希示例:
$2a$10$KssILxWNR6k62B7yiX0GAe2Q7wwHlrzhF3LqtVvpyvHZf0MwvNfVu
对一些密码进行哈希处理后,BCrypt 似乎总是生成 60 个字符的哈希值。
EDIT 2
抱歉没有提及实施情况。我在用jBCrypt http://www.mindrot.org/projects/jBCrypt/.
bcrypt 的模块化 crypt 格式包括
-
$2$
, $2a$
or $2y$
识别哈希算法和格式 https://en.wikipedia.org/wiki/Bcrypt#Versioning_history
- 表示成本参数的两位数值,后跟
$
- a 53 characters long base-64-encoded value (they use the alphabet
.
, /
, 0
–9
, A
–Z
, a
–z
that is different to the standard Base 64 Encoding https://www.rfc-editor.org/rfc/rfc4648#section-4 alphabet) consisting of:
- 22 个盐字符(实际上仅 132 个解码位中的 128 位)
- 加密输出的 31 个字符(实际上只有 186 个解码位中的 184 位)
因此总长度分别为 59 或 60 字节。
当您使用 2a 格式时,您将需要 60 个字节。因此对于 MySQL 我建议使用CHAR(60) BINARYor BINARY(60) https://dev.mysql.com/doc/refman/5.5/en/binary-varbinary.html (see The _bin and binary校对 http://dev.mysql.com/doc/refman/5.5/en/charset-binary-collations.html有关差异的信息)。
CHAR
不是二进制安全的,并且相等性不仅仅取决于字节值,还取决于实际的排序规则;在最坏的情况下A
被视为等于a
. See The _bin and binary校对 https://dev.mysql.com/doc/refman/5.6/en/charset-binary-collations.html了解更多信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)