1

古い joomla インストールを django に移行しました。ただし、パスワードハッシュは問題です。contrib.auth.models の get_hexdigest を変更して、ハッシュの生成方法を逆にする追加の if ステートメントを追加する必要がありました。

# Custom for Joomla
if algorithm == 'joomla':
    return md5_constructor(raw_password + salt).hexdigest()
# Djangos original md5
if algorithm == 'md5':
    return md5_constructor(salt + raw_password).hexdigest()

古い joomla スタイルの場合、ログイン後にパスワードを更新するために、User モデルに以下を追加しました。

# Joomla Backwards compat
algo, salt, hsh = self.password.split('$')
if algo == 'joomla':
    is_correct = (hsh == get_hexdigest(algo, salt, raw_password))
    if is_correct:
        # Convert the password to the new more secure format.
        self.set_password(raw_password)
        self.save()
    return is_correct

すべてが完全に機能していますが、このコードを django ツリーで直接編集したくありません。自分のプロジェクトでこれを行うためのよりクリーンな方法はありますか?

ありがとう

4

2 に答える 2

6

最善の策は、カスタム認証バックエンドをロールし、そこでget_hexdigestを書き直すことです。自分でやったことはありませんが、その方法に関するドキュメントはhttp://docs.djangoproject.com/en/dev/topics/auth/#authentication-backendsで入手できます。

于 2009-11-17T09:04:17.537 に答える
0

ご指導ありがとうございます。DJ のパスワードを逆に (DJangoJoomla) 使用する必要がある場合、DJ 形式はSha1$salt$crypt.

Joomla標準認証プラグインと joomla コアJUserHelperは同じ SHA1 アルゴリズムを実装していませんが、そのプラグインの joomla.php にパッチを当てるのはかなり簡単':'です。'$'と を使用して 3 部分解を行いsalt = [1]、 と比較し、 と比較し $encrypted = sha1($salt.$plaintext)ますcrypt [2]

于 2011-11-06T22:15:36.620 に答える