У меня есть хэши паролей, хранящиеся в базе данных Postgresql, сгенерированной с помощью:
password_hash($password, PASSWORD_DEFAULT);
Теперь я хотел бы также иметь возможность проверить пароль пользователя с помощью Postgresql и pgcrypto.
Но функция crypt()
в pgcrypto не может проверить существующие хэши паролей.
Однако - я могу проверить хэши паролей, сгенерированные Postgresql, с помощью PHP password_verify
.
Например:
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)
Мои вопросы в основном:
- Я делаю это неправильно?
- Если это невозможно: есть ли способ миграции, чтобы сделать это возможным?