【发布时间】:2019-03-23 02:26:52
【问题描述】:
我有一个 PHP7 应用程序,可以像这样对用户密码进行哈希处理
$hash = password_hash($password, PASSWORD_BCRYPT);
例如,如果我将test1234 传递给那个,我有:
$2y$10$aazE9OUKZlOQiM6axwxU/utpOURLQ58pluqtFZkkGE3R9ShtUxBOm
现在,我有一个 Python 应用程序,它也必须更新用户密码。它使用这样的东西:
import bcrypt
hash = bcrypt.hashpw(password, bcrypt.gensalt())
例如,相同的密码test1234 哈希为:
$2a$12$vsI9Vf9gWj/Au3McYradxuozyZychmlfqoCJcSacDWuMzUDVpv33m
如您所见,PHP 生成了 $2y,而 Python 生成了 $2a - 所以它们是有点不同的哈希版本。
现在,如果我尝试在 PHP 中验证 Python 和 PHP 哈希值,如下所示:
$result = password_verify($password, $hash);
在这两种情况下我都有true。但是,如果我尝试在 Python 端验证两者:
bcrypt.checkpw(password, hash)
它仅适用于当我传递 Python 中生成的哈希时。如果我通过 PHP 生成的哈希,我得到:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: Invalid hashed_password salt
我的问题:有什么我遗漏的吗?
bcrypt 模块由我使用 pip 安装的 py-bcrypt 项目版本 0.4 提供:
pip3 install py-bcrypt
【问题讨论】:
标签: php python hash passwords bcrypt