首页 > 解决方案 > bcrypt 中的密码检查如何工作?

问题描述

bcrypt 因此,我在docs中找到了以下示例:

password = b"super secret password"
hashed = bcrypt.hashpw(password, bcrypt.gensalt())
if bcrypt.checkpw(password, hashed):
    print("It Matches!")
else:
    print("It Does not Match :(")

它似乎有效。但我不明白怎么做。我们不应该使用 salt 来生成用于检查的哈希吗?

我的意思是,我们生成了一次盐并且没有将其保存在变量中。但是接下来我们想用函数比较哈希和密码checkpw,但是它怎么知道使用哪个盐来生成哈希进行比较呢?

标签: pythonbcrypt

解决方案


生成的“哈希”也包含盐。它采用模块化加密格式,记录在这里(感谢@Masklinn)

$2a$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy
      |<---    salt     --->||<---- confirmation hash ---->|

“2a”部分给出了正在使用的模块化散列的信息,“10”是对数成本参数(即算法将被迭代 2 10次)。

因此,要验证密码是否匹配,您将使用解码N9qo8uLOickgx2ZMRZoMye作为盐重新启动 bcrypt。


推荐阅读