9

djangoのパスワードを手動で生成するにはどうすればよいですか? たとえば、他のアプリケーションでは、django と同じデータベースを使用しています。ユーザー名 'admin' パスワードは次のようになります

pbkdf2_sha256$10000$T0BzrDwfZSrI$pSgvDEam9V9jcdYpYDVkYMMwtSnRrFdf6Aqow82Tjr8=
4

2 に答える 2

14

これはおそらくあなたが探しているものだと思います:

ユーザーのパスワードを手動で管理する

make_password(パスワード[、ソルト、ハッシャー])

このアプリケーションで使用される形式でハッシュされたパスワードを作成します。必須の引数を 1 つ取ります: プレーンテキストのパスワードです。デフォルト (PASSWORD_HASHERS 設定の最初のエントリ) を使用したくない場合は、必要に応じて、使用するソルトとハッシュ アルゴリズムを指定できます。現在サポートされているアルゴリズムは、'pbkdf2_sha256'、'pbkdf2_sha1'、'bcrypt_sha256' (Django での bcrypt の使用を参照)、'bcrypt'、'sha1'、'md5'、'unsalted_md5' (下位互換性のためのみ)、および 'crypt' if crypt ライブラリがインストールされています。password 引数が None の場合、使用できないパスワードが返されます (check_password() によって決して受け入れられないパスワード)。


djangoなしで使える書き込み機能が欲しい

幸いなことに、Django はオープン ソースなので、必要なものを手に入れることができます。関数のソースはここに表示されます

于 2013-09-30T15:49:12.457 に答える
2

ハッシュの最も一般的な (最も安全ではない) アルゴリズムはmd5. Django のパスワード システムからいくつかのアイデアを抽出すると、次のコードになります。

import hashlib

def make_password(password):
    assert password
    hash = hashlib.md5(password).hexdigest()
    return hash

def check_password(hash, password):
    """Generates the hash for a password and compares it."""
    generated_hash = make_password(password)
    return hash == generated_hash


>>> hash = make_password('hello123')
>>> hash
'f30aa7a662c728b7407c54ae6bfd27d1'
>>> check_password(hash, 'hello123')
True
>>> check_password(hash, 'Hello123')
False

make_passwordハッシュを生成し、check_password入力されたパスワードが保存されているパスワードと同じかどうかを確認するために使用します。

@Emil が指摘したように、Django は pbkdf2_sha256 や pbkdf2_sha1 などの複数のパスワード ハッシャーをサポートし、文字列を : で区切られた 3 倍の値として格納し$ますalgorithm$salt$hashsaltデータベースで同じパスワードが繰り返されるのを防ぐために、ランダムに生成された文字列です。

于 2013-09-30T16:29:46.877 に答える