djangoのパスワードを手動で生成するにはどうすればよいですか? たとえば、他のアプリケーションでは、django と同じデータベースを使用しています。ユーザー名 'admin' パスワードは次のようになります
pbkdf2_sha256$10000$T0BzrDwfZSrI$pSgvDEam9V9jcdYpYDVkYMMwtSnRrFdf6Aqow82Tjr8=
これはおそらくあなたが探しているものだと思います:
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 はオープン ソースなので、必要なものを手に入れることができます。関数のソースはここに表示されます。
ハッシュの最も一般的な (最も安全ではない) アルゴリズムは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$hash
。 salt
データベースで同じパスワードが繰り返されるのを防ぐために、ランダムに生成された文字列です。