2013-08-16 5 views
7

मैं Django में प्रोग्राम के सैकड़ों (संभवतः हजारों) उपयोगकर्ताओं के बनाने की जरूरत की एक बड़ी सूची बनाने के लिए बहुत धीमी गति से make_password। मैं कुछ ऐसा उपयोग कर रहा हूं जैसे:Django उन प्रोग्राम के

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' पर दस्तावेज के रूप में [यहां] (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 के अनुसार,

डिफ़ॉल्ट रूप से, Django एक SHA256 हैश, एक पासवर्ड खींच तंत्र NIST द्वारा सिफारिश के साथ PBKDF2 एल्गोरिथ्म का उपयोग करता। यह अधिकतर उपयोगकर्ताओं के लिए पर्याप्त होना चाहिए: यह काफी सुरक्षित है, को ब्रेक करने के लिए कंप्यूटिंग समय की भारी मात्रा की आवश्यकता होती है।

[...]

Django एक एल्गोरिथ्म PASSWORD_HASHERS परामर्श सेटिंग से चुनता है। इस एल्गोरिथ्म वर्गों है कि इस Django स्थापना का समर्थन करता hashing की एक सूची है। इस सूची में पहली प्रविष्टि (, 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

संबंधित मुद्दे