2012-02-28 15 views
51

मैंने उपयोगकर्ताओं और उनके डेटा को एक django प्रोजेक्ट में आयात किया है। मुझे प्रत्येक को एक पासवर्ड आवंटित करने की आवश्यकता है। क्या पासवर्ड पीढ़ी के लिए ऐसा स्निपेट है जो Django हैश और नमक का सामना करेगा?Django पासवर्ड जेनरेटर

+0

यह बदल सकता है, लेकिन आपको "Django हैश और नमक से निपटने" की आवश्यकता नहीं है क्योंकि आप ['.set_pass का उपयोग कर सकते हैं शब्द() 'सहायक कार्य] (https://docs.djangoproject.com/en/1.10/ref/contrib/auth/#django.contrib.auth.models.User.set_password) एक' उपयोगकर्ता 'ऑब्जेक्ट पर जो प्रक्रिया करता है आपके चुने हुए कुंजी व्युत्पन्न फ़ंक्शन के साथ पासवर्ड प्रदान किया गया है और इसके साथ '.password' फ़ील्ड/विशेषता सेट करता है। –

उत्तर

137

तुम भी समारोह make_random_password

for user in new_users: 
    password = User.objects.make_random_password() 
    user.set_password(password) 
    # email/print password 
+11

यह भी ध्यान दें कि 'make_random_password()' कीवर्ड तर्क 'लंबाई' और 'allow_chars' स्वीकार करता है। – benjaoming

3
import random 
import string 
user.set_password(''.join([random.choice(string.digits + string.letters) for i in range(0, 10)])) 
user.save() 
4

बस एपीआई का उपयोग - django.contrib.auth.models.User एक .set_password() विधि है। यहाँ एक उदाहरण है (है कि मैं परीक्षण नहीं किया है, लेकिन आप विचार प्राप्त होना चाहिए):

from random import choice 
from string import digits, letters 
from django.contrib.auth.models import User 

def _pw(length=6): 
    s = '' 
    for i in range(length): 
     s += random.choice(digits + letters) 
    return s 

for user in User.objects.all(): # or .filter(...) 
    user.set_password(_pw()) 
    user.save() 
4

इसके अलावा में बनाया का उपयोग कर सकते हैं auth से बाहर from django.utils.crypto import get_random_string उपयोग कर सकते हैं मॉड्यूल, यह कीवर्ड तर्क length और allowed_chars भी स्वीकार करता है।

+1

+1। User.objects.make_random_password() पर पसंदीदा क्योंकि यह Django सेटिंग्स को कॉन्फ़िगर किए बिना स्टैंडअलोन स्क्रिप्ट से चलाया जा सकता है। मैं इसे यादृच्छिक स्थिरता पीढ़ी के लिए उपयोग करता हूं। – m000

3

आप केवल एक Django`s समाधान की जरूरत है, तो अगले कोशिश:

के लिए एक सामान्य पासवर्ड कोशिश उपयोग BaseUserManager उत्पन्न करते हैं।

In [341]: from django.contrib.auth.base_user import BaseUserManager 

# simple password, it length is 10, and it contains ascii letters and digits 
In [344]: BaseUserManager().make_random_password() 
Out[344]: 'aYMX5Wk7Cu' 

In [345]: BaseUserManager().make_random_password() 
Out[345]: 'rM7759hw96' 

In [346]: BaseUserManager().make_random_password() 
Out[346]: 'EkbZxEXyAm' 

# passed length of a password 
In [347]: BaseUserManager().make_random_password(45) 
Out[347]: 'dtM9vhSBL9WSFeEdPqj8jVPMH9ytsjPXrkaHUNUQu4zVH' 

In [348]: BaseUserManager().make_random_password(45) 
Out[348]: 'jypVaXuw9Uw8mD4CXtEhtj2E4DVYx23YTMwy8jGTKsreR' 

# passed length of a password and symbols for choice 
In [349]: BaseUserManager().make_random_password(45, 'abcdf') 
Out[349]: 'daacbfabfccfdbdddbbcddcfcfbfcdabbaccbfcadbccd' 

In [351]: import string 

# password contains only digits 
In [352]: BaseUserManager().make_random_password(50, string.digits) 
Out[352]: '00526693878168774026398080457185060971935025500935' 

# password contains only ascii symbols in lowercase 
In [353]: BaseUserManager().make_random_password(50, string.ascii_lowercase) 
Out[353]: 'nvftisuezofnashdhlalfmscnmqtvigwjpfwsyycsefekytmar' 

# password contains only ascii symbols in uppercase 
In [354]: BaseUserManager().make_random_password(50, string.ascii_uppercase) 
Out[354]: 'APKSUHHHTAAJCFEUONIXWWAKJGXIBHTQDZBTSYFTPDFOSRYEQR' 

आप मजबूत और बिजली पासवर्ड की जरूरत है, तो Django

In [355]: from django.contrib.auth.hashers import make_password 

In [357]: make_password('') 
Out[357]: 'pbkdf2_sha256$30000$JuKXdW3shCjL$PsPJX7Zale5JUBkWpIJI/+QlsuVWhz9Q+GQWVtTpQ/Y=' 

In [358]: make_password('text') 
Out[358]: 'pbkdf2_sha256$30000$lSv8kQ39BHE7$KQC5hRhuphYBXmBrXZBJGC+nxygfNWTDf8zQf/NNgY8=' 

In [360]: make_password('text', salt=['simething']) 
Out[360]: "pbkdf2_sha256$30000$['simething']$D+1vJQx9W2/c9sIz/J+7iEz4d4KFPg/R+0S87n/RKR4=" 

In [361]: make_password('text', salt=['something']) 
Out[361]: "pbkdf2_sha256$30000$['something']$NIcmOkEyg6mnH5Ljt+KvI2LVgZWg6sXS6Rh865rbhSc=" 

नोट्स में निर्मित "hashers" का प्रयास करें:

  1. प्रयुक्त Django 1.10 और अजगर 3.4
संबंधित मुद्दे