Проблема кодирования/декодирования Python bcrypt postgres?

У меня есть простое приложение Flask, использующее bcrypt. Я потратил несколько часов на эту простую и удобную библиотеку, чтобы выяснить проблему кодирования. Метод входа в систему вызывает метод 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

Почему я получаю недействительную ошибку соли.


person Rupesh Desai    schedule 10.04.2020    source источник


Ответы (1)


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

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

Основная проблема заключается в том, что вам необходимо убедиться, что вы не храните хешированный пароль в БД как varchar, поскольку строка может быть закодирована автоматически во время процесса ETL. Вместо этого просто используйте обычное поле «ТЕКСТ» или поле «СИМВОЛ». Идеальная длина должна быть около 80 символов. У меня было 100 для безопасности.

person Rupesh Desai    schedule 13.04.2020