Python bcrypt postgres проблема кодирования / декодирования? - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть простое Flask приложение, которое использует bcrypt. Я потратил несколько часов на эту простую в использовании библиотеку, чтобы выяснить проблему кодирования. Метод login вызывает метод doDecideHashedPassword, который затем должен возвращать true или false, если учетные данные совпадают.

Также обратите внимание на следующее

  1. Я использую postgres, и в настоящее время мое поле пароля установлено на varchar (500)
  2. Я преобразую хешированный пароль в str для точного хранения его в базе данных.

Когда я запрашиваю хешированный пароль из базы данных и передаю его через doDecodeHashedPassword ниже , Я получаю недопустимую соль. Это принимает электронную почту и пароль из формы.

def doDecodeHashedPassword(self, email, password):
        getpwd = ClientUser.query.filter_by(email=email).one()
        getpwd = getpwd.password
        getpwd = getpwd.encode()
        password = password
        check_user_integrity = bcrypt.checkpw(password,getpwd)
        if check_user_integrity:
            return (check_user_integrity)
        else:
            return False

Почему я получаю недопустимую соль.

1 Ответ

0 голосов
/ 13 апреля 2020

Все, что мне нужно было сделать, это убедиться, что декодированный формат пароля хранится в базе данных. Это сводило меня с ума на некоторое время, но теперь оно восстанавливается.

bcrypt.hashpw(password, bcrypt.gensalt(16)).decode()

Основная проблема заключается в том, что вам нужно убедиться, что вы не храните хешированный пароль в БД как varchar, поскольку строка может быть закодирована автоматически во время процесса ETL. Вместо этого просто используйте простое поле "TEXT" или поле "CHAR". Идеальная длина должна быть около 80 символов. У меня просто 100 для безопасности.

...