当前位置: 首页 > 面试题库 >

在数据库中存储Bcrypt哈希密码时应使用哪种列类型/长度?

景震博
2023-03-14
问题内容

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

编辑

哈希示例:

$2a$10$KssILxWNR6k62B7yiX0GAe2Q7wwHlrzhF3LqtVvpyvHZf0MwvNfVu

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

编辑2

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


问题答案:

bcrypt的模块化crypt格式包括

  • $2$$2a$$2y$识别哈希算法和格式
  • 表示费用参数的两位数字值,后跟 $
  • 一个53字符长的基64编码的值(它们使用的字母表./0- 9A- Za- z也就是不同的标准Base 64编码字母表)由以下组成:
    • 盐的22个字符(有效地是132个解码位中的128个位)
    • 31个字符的加密输出(实际上只有186个解码位中的184位)

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

使用2a格式时,需要60个字节。因而对于MySQL的,我会建议使用CHAR(60) BINARYBINARY(60)(见的 __bin_ 和 二进制
排序规则
有关的差异信息)。

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



 类似资料:
  • 问题内容: 我不确定密码哈希的工作原理(稍后将实现),但现在需要创建数据库架构。 我正在考虑将密码限制为4-20个字符,但是据我了解,加密哈希字符串后的长度将不同。 那么,如何将这些密码存储在数据库中呢? 问题答案: 更新:仅使用哈希函数不足以存储密码。您应该阅读Gilles在该主题上的答案,以获取更详细的解释。 对于密码,请使用增强密钥的哈希算法,例如Bcrypt或Argon2i。例如,在PHP

  • 不,这个问题不是众多“存储密码的最佳MySQL数据类型是什么”的重复。 我的密码哈希当前在节点上使用pbkdfSync进行。js,我将输出设置为128(无论它是什么字节位),它将输出256个字符的哈希。 你可能会问有什么问题?嗯,这就是我的想法。在我遇到这个问题之前:使用VARCHAR时,“列密码的值太长”。 许多谷歌搜索都说varchar字符限制为65535个字符,但出于某种原因,我认为只有25

  • 问题内容: 我感觉自己快要到了,但是对异步的不完全理解使我无法解决这个问题。我基本上是在尝试使用bcrypt哈希密码,并决定将hashPassword函数分离出来,以便可以在应用程序的其他部分中使用它。 不断返回undefined … 问题答案: 剂量等待因为不退诺。请使用以下方法,该方法将Promise包裹起来才能使用。

  • 本文向大家介绍密码哈希函数 Bcrypt的最大密码长度限制详解,包括了密码哈希函数 Bcrypt的最大密码长度限制详解的使用技巧和注意事项,需要的朋友参考一下 密码哈希函数 Bcrypt的最大密码长度限制 Bcrypt是一个很流行的密码哈希算法,是Niels Provos和DavidMazières基于Blowfish加密算法设计的密码哈希算法,于1999年在USENIX协会上提交。Bcrypt在

  • 问题内容: 我应该使用哪种PostgreSQL列类型来存储Java BigDecimal? 问题答案: 请参见PostgreSQL数据类型 -也许是Numeric,它可以充当 任意精度类型 (这是PostgreSQL扩展)。 …没有任何精度或小数位数,会创建一列,其中可以存储任何精度和小数位数的数值,但不超过精度的实施限制。 不过,我并不完全确定“精确度的实现限制”是什么。从来没有尝试过 真正的

  • 问题内容: 我读过我应该用 钱 ,但是在当今快节奏的世界里,现在也许已经过时了。 我应该使用什么? 问题答案: 不,钱应该还是可以的。