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
,但是它怎么知道使用哪个盐来生成哈希进行比较呢?
解决方案
生成的“哈希”也包含盐。它采用模块化加密格式,记录在这里(感谢@Masklinn)
$2a$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy
|<--- salt --->||<---- confirmation hash ---->|
“2a”部分给出了正在使用的模块化散列的信息,“10”是对数成本参数(即算法将被迭代 2 10次)。
因此,要验证密码是否匹配,您将使用解码N9qo8uLOickgx2ZMRZoMye
作为盐重新启动 bcrypt。
推荐阅读
- android - Firebase 数据库中是否有空地图计数带宽的更新?
- python - 并非所有元素都从列表中删除
- azure-api-management - 如何绕过 Azure API 管理中 API 中单个端点的订阅密钥
- javascript - 如何更喜欢速记对象返回
- python - python - 如何根据python中一个图形中不同图的一个变量获得不同的线条颜色?
- node.js - 带有flutter项目的Nodejs在物理设备上运行
- android - 无法创建类“MoviesViewModels”的实例 - 错误 - Jetpack Compose - Kotlin
- ansible - 如何为此 cmd 编写 Ansible Playbook => mysql_secure_installation
- java - 用户获取之前登录用户的 UserId
- c# - 向图表区域添加点