django: преобразовать несоленый хэш md5 (без соли) в pbkdf2 - PullRequest
0 голосов
/ 15 мая 2019

У меня есть старая база данных, где пароли пользователей хэшируются с помощью md5 без соли.Сейчас я конвертирую проект в django и мне нужно обновить пароли, не прося пользователей войти в систему.

Я написал этот хеш:

from django.contrib.auth.hashers import PBKDF2PasswordHasher

class PBKDF2WrappedMD5PasswordHasher(PBKDF2PasswordHasher):
    algorithm = 'pbkdf2_wrapped_md5'

    def encode_md5_hash(self, md5_hash, salt):
        return super().encode(md5_hash, salt) 

и преобразовал пароль как:

for data in old_user_data:
    hasher = PBKDF2WrappedMD5PasswordHasher()
    random_salt = get_random_string(length=8)
    # data['password'] is e.g. '972131D979FF69F96DDFCC7AE3769B31'
    user.password = hasher.encode_md5_hash(data['password'], random_salt)

но я не могу войти с моим тестовым пользователем.

есть идеи?: /

1 Ответ

0 голосов
/ 24 мая 2019

Боюсь, вы не можете делать то, что вы хотите с этим.Хеширование строго одностороннее, поэтому нет способа конвертировать один хеш в другой.Вам нужно будет обновить эти пароли до нового хэша один за другим, когда пользователи войдут в систему.

Достойная стратегия для реализации этого изменения:

  1. Отметьте все свои существующиехеши как md5.Вы можете просто использовать какой-либо логический флаг / столбец, но для этого существует общепринятый стандарт: https://passlib.readthedocs.io/en/stable/modular_crypt_format.html
  2. Когда пользователь входит в систему, аутентифицируйте его, сначала проверив, какой тип хеша он имеет, а затемвычисляя этот хэш.Если они все еще md5, вычислите md5, чтобы войти в них;если они теперь используют pbkdf2, вместо этого вычислите этот хеш.
  3. После аутентификации пароля, если они все еще помечены как md5, вычислите хэш нового формата и замените его - убедитесь, что теперь помечены как pbkdf2.

ВАЖНО: Вам нужно тщательно протестировать это, прежде чем выпускать в дикую природу.Если вы совершите ошибку, вы можете уничтожить учетные данные любого пользователя, вошедшего в систему. Я бы рекомендовал временно сохранить копию старых хешей md5, пока вы не подтвердите стабильность производства, но убедитесь, что вы полностью уничтожили эту копию.Пароли ваших пользователей небезопасны, пока существуют хеши md5.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...