python - 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来比较hash和password,但是它怎么知道用哪个salt来生成hash来比较呢?

最佳答案

生成的“散列”也包含盐。它采用模块化地穴格式,已记录 here (感谢@Masklinn)

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

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

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

https://stackoverflow.com/questions/69175990/

相关文章:

awk - 根据列将大文件拆分为多个文件

c - 在 C 程序中使用汇编函数

kotlin - 优化 for 循环以将项目添加到 map

r - 在避免循环的同时计算 "smaller"行数比其他行数

vue.js - Nuxt : how can I get sourcemap files and

c++ - 声明属于所有特化的类模板成员

sql - Oracle SQL 19c中如何获取日期对应的季度

python - 我如何拆分第二个 ", "

javascript - typescript 创建新 map

javascript - 格式化电话号码(去除空格并替换第一个数字,如果它是 0)