【发布时间】:2019-11-20 12:42:33
【问题描述】:
我非常接近了解 bcrypt 的比较功能是如何工作的,但在我的知识中存在一些缺失的漏洞。
到目前为止我的理解:
brcypt 使用纯文本密码和随机生成的盐生成散列密码。散列密码是 bcrypt 版本、散列盐和串联散列纯文本密码的组合。当用户登录时,他们的纯文本密码通过比较功能运行。此时,bcrypt 知道散列中有多少个字符,以及从哪个偏移量开始将散列盐从完整散列中分割出来。然后它将盐与传入的纯文本密码连接起来,通过散列算法运行它以得到最终的散列字符串。将散列字符串与数据库中的散列字符串进行比较,如果字符完全匹配,则密码正确。
2 个问题..
难道哈希值是不可能逆转的吗?如果是这样,那么 bcrypt 如何知道如何解密散列盐,然后使用它来散列传入的纯文本密码。这对我来说没有任何逻辑意义。
如果 brcypts 算法被编写成它总是可以创建一个它总是知道如何解密的散列盐,那么黑客就不能使用该算法从数据库中获取每个散列密码并将盐切掉吗?然后它可以为每种盐创建一个彩虹表并破解每个单独的密码?这在我看来是合乎逻辑的。
如果我的问题没有任何意义,请原谅。很高兴编辑。
阅读文章、阅读堆栈溢出问题、观看视频并询问高级工程师。
【问题讨论】:
-
检查this
-
还要回答你的问题 2,这就是盐的作用:使得设计彩虹表在计算上非常昂贵/不可行:黑客必须创建一个单独的彩虹每种可能的盐的表(请记住,盐空间非常大)。彩虹表通过预先计算散列来工作。这是相当困难的工作,至少可以说,没有盐。现在,想象一下必须为盐空间的每个可能元素做些什么。稍后可能会提供完整的答案,如果我有时间。
标签: hash bcrypt rainbowtable