2013-08-16 1 views
7

장고에서는 프로그래밍 방식으로 수 백 (수천 명)의 사용자를 프로그래밍해야합니다. 나는 다음과 같은 것을 사용하고있다 :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

소금과 자신의 해싱 알고리즘을'make_password'에 전달할 수 있습니다. [here] (https://docs.djangoproject.com/en/dev/topics/auth/passwords/#django.contrib.auth). hashers.make_password). –

답변

14

초기 암호로 django.contrib.auth.hashers.MD5PasswordHasher을 사용할 수 있습니다. 기본적으로

, Django docs on how Django stores passwords 당으로, 장고는 SHA256 해시, NIST에 의해 추천 비밀번호 스트레칭 메커니즘과 PBKDF2 알고리즘을 사용합니다. 대부분의 사용자에게 이것은 으로 충분해야합니다. 매우 안전합니다. 은 방대한 양의 컴퓨팅 시간을 필요로합니다.

는 [...]

장고는 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