【发布时间】:2019-04-07 09:32:41
【问题描述】:
我在 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)
我的问题基本上是:
- 我做错了吗?
- 如果这不可能:是否有迁移路径可以使这成为可能?
【问题讨论】:
-
$2y$是 PHP 特定的算法,因为它的$2a$实现有一个错误,IIRC。问题可能是很少有其他系统支持它。
标签: php postgresql crypt pgcrypto