我非常接近了解 bcrypt 的比较功能是如何工作的,但是在我的知识中存在一些缺失的漏洞。
到目前为止我的理解:
brcypt 使用纯文本密码和随机生成的盐生成散列密码。散列密码是 bcrypt 版本、散列盐和串联散列纯文本密码的组合。当用户登录时,他们的纯文本密码通过比较功能运行。此时,bcrypt 知道散列中有多少个字符,以及从哪个偏移量开始将散列盐从完整散列中分割出来。然后它将盐与传入的纯文本密码连接起来,通过散列算法运行它以得到最终的散列字符串。将散列字符串与数据库中的散列字符串进行比较,如果字符完全匹配,则密码正确。
2个问题..
散列不应该是不可能逆转的吗?如果是这样,那么 bcrypt 如何知道如何解密散列盐,然后使用它来散列传入的纯文本密码。这对我来说没有任何逻辑意义。
如果 brcypts 算法被编写成它总是可以创建一个它总是知道如何解密的散列盐,那么黑客不能使用该算法从数据库中获取每个散列密码并将盐切掉吗?然后它可以为每种盐创建一个彩虹表并破解每个单独的密码?这在我看来是合乎逻辑的。
如果我的问题没有任何意义,请原谅。很高兴编辑。
阅读文章,阅读堆栈溢出问题,观看视频并询问高级工程师。