小编bar*_*ell的帖子

将 bcrypt 密码哈希从 PHP 迁移到 Python - ValueError:无效的 hashed_pa​​ssword salt

我有一个 PHP7 应用程序,它可以像这样对用户密码进行哈希处理

$hash = password_hash($password, PASSWORD_BCRYPT);
Run Code Online (Sandbox Code Playgroud)

例如,如果我转到test1234那个,我有:

$2y$10$aazE9OUKZlOQiM6axwxU/utpOURLQ58pluqtFZkkGE3R9ShtUxBOm
Run Code Online (Sandbox Code Playgroud)

现在,我有一个 Python 应用程序,它也必须更新用户密码。它使用这样的东西:

import bcrypt

hash = bcrypt.hashpw(password, bcrypt.gensalt())
Run Code Online (Sandbox Code Playgroud)

例如,相同的密码test1234散列为:

$2a$12$vsI9Vf9gWj/Au3McYradxuozyZychmlfqoCJcSacDWuMzUDVpv33m
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,PHP 生成的$2y位置与 Python 的生成位置$2a相同,因此它们是哈希版本的一些不同版本。

现在,如果我尝试在 PHP 中验证 Python 和 PHP 哈希值,如下所示:

$result = password_verify($password, $hash);
Run Code Online (Sandbox Code Playgroud)

true两种情况我都有。但是,如果我尝试在 Python 端验证两者:

bcrypt.checkpw(password, hash)
Run Code Online (Sandbox Code Playgroud)

它仅适用于当我传递在 Python 中生成的哈希值时。如果我传递 PHP 中生成的哈希值,我会得到:

Traceback (most recent call last):
   File "<stdin>", line 1, in <module>
ValueError: Invalid hashed_password salt
Run Code Online (Sandbox Code Playgroud)

我的问题:我有什么遗漏的吗?

该模块由我使用 pip 安装的项目版本 0.4bcrypt提供:py-bcrypt

pip3 install py-bcrypt
Run Code Online (Sandbox Code Playgroud)

php python passwords hash bcrypt

5
推荐指数
1
解决办法
1998
查看次数

标签 统计

bcrypt ×1

hash ×1

passwords ×1

php ×1

python ×1