Перенос Bcrypt с PHP на Django

Я переношу бэкенд PHP на Django и не хочу заставлять пользователей менять свои пароли. В PHP я использую Bcrypt, который использует версию 2y, в то время как Django использует 2b, что делает их несовместимыми.

Я читал другие решения, где люди пишут совершенно новый хэшер, но это кажется слишком сложным. Моим решением было переопределить функцию check_password() моей User модели:

def check_password(self, raw_password):
    def setter():
        pass

    alg_prefix = 'bcrypt_php'
    if self.password.startswith(alg_prefix):
        return bcrypt.checkpw(bytes(raw_password, 'utf-8'), bytes(self.password[len(alg_prefix):], 'utf-8'))
    else:
        return super().check_password(raw_password)

А для сохранения старых паролей добавьте bcrypt_php в начале.

Вопрос в следующем: Опасно ли делать это? Подвергаю ли я опасности свои пароли или свою систему?

Вернуться на верх