2013-08-16 8 views
7

Djangoではプログラム的に数百(おそらくは何千もの)のユーザを作成する必要があります。私は次のようなものを使用しています:Django make_passwordがプログラマチックに大量のユーザリストを作成するには遅すぎる

from django.contrib.auth.models import User 
from django.contrib.auth.hashers import make_password 
for username, email, pwd in big_user_list: 
    m = User(username=username, email=email, password=make_password(pwd)) 
    m.save() 

これは実行に時間がかかりすぎます。私はmake_passwordがパスワードなしで上記のスクリプトを実行することによって原因であることを確認しました。

この遅い問題の周りにはとにかく、私は本当にこのスクリプトがすばやく実行する必要があります。

+0

saltと独自のハッシュアルゴリズムを 'make_password'に渡すことができます。[here](https://docs.djangoproject.com/ja/dev/topics/auth/passwords/#django.contrib.auth) hashers.make_password)。 –

答えて

14

初期パスワードにdjango.contrib.auth.hashers.MD5PasswordHasherを使用できます。デフォルトではDjango docs on how Django stores passwordsあたりとして、

、DjangoはSHA256ハッシュ、NISTが推奨するメカニズムを伸ばし パスワードでPBKDF2アルゴリズムを使用しています。これは、ほとんどのユーザーにとって十分な である必要があります。それは非常に安全です。は大量の計算を必要とします。

[...]

DjangoはPASSWORD_HASHERSに 設定を調べることによって、アルゴリズムを選択します。これは、このDjango のインストールがサポートするハッシングアルゴリズムクラスのリストです。 このリストの最初のエントリが(つまり、 settings.PASSWORD_HASHERS [0])がパスワードを保存するために[デフォルト]を使用され、すべての 他のエントリは、既存のチェックに使用できる有効なhashersですパスワードは です。 [...]

PASSWORD_HASHERSのデフォルトは次のとおりです。

PASSWORD_HASHERS = (
    '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' 
) 

したがって、あなたはそれが今であるように、デフォルトを維持したいが、初めに弱い調理人を使うだろう。 MD5PasswordHasherがリストに含まれていることを確認してください。次に、平らな塩漬けのMD5パスワードを最初に生成するには、

make_password(pwd, None, 'md5') 

を使用してください。初期パスワードが十分にランダムであれば、これは弱すぎることはありません。ユーザーがパスワードを変更すると、パスワードはより強力なアルゴリズムで暗号化されます。

+0

は魅力のように機能します、ありがとう。 –

+1

良いアイデア!しかし**あなたがそれらに与える最初のパスワードが確かに本当に良いパスワードである場合、** **のみ。完全にランダムな12文字のASCII文字列。 – nealmcb

関連する問題