Перенос 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
в начале.
Вопрос в следующем: Опасно ли делать это? Подвергаю ли я опасности свои пароли или свою систему?