使用pgcrypto验证password_hash生成的密码

问题描述 投票:1回答:1

我有一个存储在Postgresql数据库中的密码哈希值:

password_hash($password, PASSWORD_DEFAULT);

现在我也希望能够使用Postgresql和pgcrypto验证用户密码。

但是pgcrypto的crypt()函数无法验证现有的密码哈希值。

但是 - 我可以使用PHP的password_verify验证Postgresql生成的密码哈希值。

例如:

password_hash('hello', PASSWORD_DEFAULT);
$2y$10$fD2cw7T6s4dPvk1SFHmiJeRRaegalE/Oa3zSD6.x5WncQJC9wtCAS
postgres=# SELECT crypt('hello', gen_salt('bf'));
                            crypt                             
--------------------------------------------------------------
 $2a$06$7/AGAXFSTCMu9r.08oD.UulYR0/05q7lmuCTC68Adyu/aNJkzpoIW

验证:

// php_verify with the Postgresql hash
php > var_dump(password_verify('hello', '$2a$06$7/AGAXFSTCMu9r.08oD.UulYR0/05q7lmuCTC68Adyu/aNJkzpoIW'));
bool(true)

postgres=# SELECT crypt('hello', '$2y$10$fD2cw7T6s4dPvk1SFHmiJeRRaegalE/Oa3zSD6.x5WncQJC9wtCAS');
     crypt     
---------------
 $2JgKNLEdsV2E
(1 Zeile)

我的问题基本上是:

  • 我做错了吗?
  • 如果这是不可能的:是否有迁移路径可以实现此目的?
php postgresql crypt pgcrypto
1个回答
2
投票

从答案:Where 2x prefix are used in BCrypt?,其中包含有关从实现错误中产生的$ 2 $变体的所有详细信息:

2a,2x,2y和2b之间没有区别。如果您正确编写了实现,它们都会输出相同的结果。

基于此,可以使用PHP qazxsw poi生成的哈希值,用qazxsw poi替换领先的qazxsw poi,并将其作为pgcrypto的password_hash的第二个参数传递。

使用示例中的值:

$2y$
© www.soinside.com 2019 - 2024. All rights reserved.