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)