0

ユーザーを他のサイトからdjangoサイトに移行しました。古いWebページにはsaltを含むmd5パスワードがあり、ユーザーが古いパスワードで認証できるように、カスタムハッシュアルゴリズムを作成しています。

古いユーザーとしてログインしようとすると、次のようになります。

Unknown password hashing algorithm 'my_hashed_password'. Did you specify it in the PASSWORD_HASHERS setting?

それが私のパスワードハッシャーです

class FallbackMD5PasswordHasher(BasePasswordHasher):

    algorithm = "fallback_md5"

    def salt(self):
        return 'my_salt'

    def encode(self, password):
        return hashlib.md5(self.salt() + password).hexdigest()

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

    def safe_summary(self, encoded):
        return SortedDict([
            (_('algorithm'), self.algorithm),
            (_('hash'), mask_hash(encoded, show=3)),
        ])

それが私のsettings.pyです

PASSWORD_HASHERS = (
    'lfs_custom.hasher.FallbackMD5PasswordHasher',
    'django.contrib.auth.hashers.PBKDF2PasswordHasher',
    'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher',
    'django.contrib.auth.hashers.BCryptPasswordHasher',
    'django.contrib.auth.hashers.SHA1PasswordHasher',
    'django.contrib.auth.hashers.MD5PasswordHasher',
    'django.contrib.auth.hashers.CryptPasswordHasher',
    )

これを修正する方法を教えてください:)なぜ機能しないのかわかりません。

4

2 に答える 2

2

Django は、次の形式を使用してデータベースからハッシュを解析しようとします:

<algorithm>$<iterations>$<salt>$<hash>

データベースにプレーンハッシュがある可能性があります。データベースで SQL を実行して、次のような正しい形式で更新してみてください。

update auth_user set password=concat("md5$1$", password);
于 2013-01-25T13:40:56.333 に答える