gpt4 book ai didi

ruby-on-rails-3.1 - 为什么使用相同密码的2个用户的密码哈希不同?

转载 作者:行者123 更新时间:2023-12-04 05:04:21 25 4
gpt4 key购买 nike

即时通讯与Rails一起工作,我注意到我的password_digest对于2个用户来说是不同的,除了密码摘要之外,其他所有字段都不同。但是我为两个都使用了相同的密码“abcd”。
最终生成了这2个不同的哈希

  • $2a$10$QyrjMQfjgGIb4ymtdKQXI.WObnWK0/CzR6yfb6tlGJy0CsVWY0GzO
  • $2a$10$dQSPyeQmZCzVUOXQ3rGtZONX6pwvnKSBRmsLnq1t1CsvdOTAMQlem

  • 我以为bcrypt gem仅根据密码字段生成哈希!我错了吗?
    谢谢 :)

    最佳答案

    您在这里看到的不只是密码哈希,这些字符串中还包含许多有关哈希的元数据。就bcrypt而言,整个字符串将被视为bcrypt哈希。它包括以下内容:

    $是bcrypt中的定界符。

    $ 2a $是使用的bcrypt算法。

    $ 10 $是使用的成本因素。这就是为什么bcrypt在存储哈希中非常受欢迎的原因。每个哈希都具有与之相关的复杂性/成本,您可以将其视为计算机生成此哈希将花费多长时间。这个数字当然是相对于计算机的速度而言的,因此随着这些年来计算机的速度越来越快,生成散列的散列所花费的时间将越来越少。因此,明年您将花费增加到11,然后到12 ... 13 ...等等。这样可以使将来的哈希值保持强大,同时保持较旧的哈希值仍然有效。请注意,不重新哈希原始字符串就无法更改哈希值。

    $ QyrjMQf ...是盐和哈希值的组合。这是base64编码的字符串。

    前22个字符为盐。

    其余字符是与2a算法一起使用时的哈希值,成本为10以及给定的盐。出现这种情况的原因是,攻击者无法预先计算bcrypt哈希值,以避免支付生成它们的成本。

    实际上,这就是您最初的问题的答案:哈希值不同的原因是,如果哈希值相同,您就会知道,每次看到bcrypt字符串$2a$10$QyrjMQfjgGIb4ymtdKQXI.WObnWK0/CzR6yfb6tlGJy0CsVWY0GzO时,您就会知道密码将是abcd。因此,您可以只扫描哈希数据库,并通过查找该哈希来快速找到所有具有abcd密码的用户。

    您不能使用bcrypt做到这一点,因为$2a$10$dQSPyeQmZCzVUOXQ3rGtZONX6pwvnKSBRmsLnq1t1CsvdOTAMQlem也是abcdbcrypt('abcd')的结果还有很多很多其他的哈希值。这使得扫描数据库中的abcd密码几乎是不可能的。

    关于ruby-on-rails-3.1 - 为什么使用相同密码的2个用户的密码哈希不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11177557/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com