Django изменяет алгоритм хешера для пароля пользователя

Мне нужно перенести пароли SHA512 из другой базы данных в Dango.

пример пароля - b792e3c67205a800d16fceb2dacf5b70fada6f31e905352750e093bedc95ab970c0121f7c3f2a3bfcab32f3cb8a2c0d2273ada96b082dd0fbd012dbae379dcb1

и мне нужно использовать auth с этим паролем

Я пробую это. но это не работает

hasher.py

import hashlib

from django.contrib.auth.hashers import BasePasswordHasher, mask_hash
from django.utils.crypto import constant_time_compare
from django.utils.translation import gettext_noop as _


class CustomPasswordHasher(BasePasswordHasher):

    algorithm = 'sha512'

    def salt(self):
        return ''

    def encode(self, password, salt):
        hash = hashlib.sha512(password.encode())
        return hash

    def verify(self, password, encoded):
        encoded_2 = self.encode(password, '')
        return constant_time_compare(encoded, encoded_2)

    def safe_summary(self, encoded):
        return {
            _('algorithm'): self.algorithm,
            _('hash'): mask_hash(encoded, show=3),
        }

settings.py

PASSWORD_HASHERS = [
    'restorating.hasher.CustomPasswordHasher',
    'django.contrib.auth.hashers.PBKDF2PasswordHasher',
    'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher',
    'django.contrib.auth.hashers.Argon2PasswordHasher',
    'django.contrib.auth.hashers.BCryptSHA256PasswordHasher',
]

вот как это работало!

но хэш хранится в формате <algorithm$hash>

import hashlib

from django.contrib.auth.hashers import BasePasswordHasher
from django.utils.crypto import constant_time_compare


class CustomPasswordHasher(BasePasswordHasher):
    algorithm = 'sha512'

    def encode(self, password, salt):
        assert password is not None
        hash = hashlib.sha512(password.encode()).hexdigest()[:120]
        return '%s$%s' % (self.algorithm, hash)

    def verify(self, password, encoded):
        encoded_2 = self.encode(password, '')
        return constant_time_compare(encoded, encoded_2)
Вернуться на верх