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

发布于 2021-02-02 16:35:08

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

编辑

哈希示例:

$2a$10$KssILxWNR6k62B7yiX0GAe2Q7wwHlrzhF3LqtVvpyvHZf0MwvNfVu

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

编辑2

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

关注者
0
被浏览
149
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    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排序规则以获取更多信息。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看