Создайте новый модуль со следующим хешем паролей Django для обработки паролей ASP.net (sha1):
import hashlib
import base64
from django.contrib.auth.hashers import (BasePasswordHasher, mask_hash)
from django.utils.datastructures import SortedDict
from django.utils.encoding import force_bytes
from django.utils.crypto import constant_time_compare
from django.utils.translation import ugettext_noop as _
def utf16tobin(s):
return s.encode('hex')[4:].decode('hex')
class MSSHA1PasswordHasher(BasePasswordHasher):
"""
ASP.NET hasher
"""
algorithm = "mssha1"
def encode(self, password, salt):
assert password is not None
assert salt and '$' not in salt
pwdenc = password.encode('utf16')
pwdenc = utf16tobin(pwdenc)
saltdecode = base64.b64decode(salt)
m = hashlib.sha1()
m.update(saltdecode)
m.update(pwdenc)
hash = base64.b64encode(m.digest())
return "%s$%s$%s" % (self.algorithm, salt, hash)
def verify(self, password, encoded):
algorithm, salt, hash = encoded.split('$', 2)
assert algorithm == self.algorithm
encoded_2 = self.encode(password, salt)
return constant_time_compare(encoded, encoded_2)
def safe_summary(self, encoded):
algorithm, salt, hash = encoded.split('$', 2)
assert algorithm == self.algorithm
return SortedDict([
(_('algorithm'), algorithm),
(_('salt'), mask_hash(salt, show=2)),
(_('hash'), mask_hash(hash)),
])
Добавьте имя модуля в файл настроек в списке PASSWORD_HASHERS (см. https://docs.djangoproject.com/en/1.4/topics/auth/ для получения подробной информации).
Перенесите соль и пароль ASP.net в поле пароля Django следующим образом:
user.password = "mssha1$" + old_membership.passwordsalt + "$" + old_membership.password
Пользователи могут затем войти в приложение Django со своим существующим ASP.сетевые пароли.После успешного входа в систему Django автоматически обновит свои пароли до последнего алгоритма, например, PBKDF2.