У меня есть приложение 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
- так что это несколько разные версии хэшей.
Теперь, если я попытаюсь проверить, хэши Python и PHP, в PHP вот так:
$result = password_verify($password, $hash);
Iиметь 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
поставляется py-bcrypt
проект версии 0.4, который я установил с помощью pip:
pip3 install py-bcrypt