2014-05-02 10 views
14

फ्लास्क में,बोतल - generate_password_hash नहीं निरंतर उत्पादन

जब मैं चलाने के लिए generate_password_hash("Same password") कई बार ouput हर बार अलग है की कोशिश?

मैं क्या गलत कर रहा हूं। यह स्थिर क्यों नहीं है?

मुझे लगता है कि नमक स्थापित करने के साथ कुछ करने के लिए मुझे लगता है?

+1

बाहर निकलता है जब मैं इसे अपने डेटाबेस में संग्रहीत करता था तो मैं इसे छोटा कर रहा था ई। नतीजतन, मैं इसकी तुलना ठीक से नहीं कर सका :-) –

+1

इस प्रश्न पूछने के लिए धन्यवाद - मैं check_password_hash() विधि का उपयोग करने के बजाय तुलना करने के लिए पुनः प्रयास कर रहा था। अन्यथा ऐसा करने के लिए नहीं जाना चाहिए लेकिन सवाल के जवाब के लिए। आप दोनों के लिए उपरोक्त। – JakeJ

उत्तर

29

पासवर्ड नमकीन है, हाँ। हैशिंग से पहले नमक को पासवर्ड में जोड़ा जाता है, यह सुनिश्चित करने के लिए कि हैश rainbow table attack में उपयोग योग्य नहीं है।

क्योंकि जब भी आप फ़ंक्शन को कॉल करते हैं तो नमक यादृच्छिक रूप से जेनरेट होता है, परिणामी पासवर्ड हैश भी अलग होता है। लौटा हुआ हैश में जेनरेट किए गए नमक शामिल हैं ताकि पासवर्ड को सही ढंग से सत्यापित कर सकें।

डेमो:

>>> from werkzeug.security import generate_password_hash 
>>> generate_password_hash('foobar') 
'pbkdf2:sha1:1000$tYqN0VeL$2ee2568465fa30c1e6680196f8bb9eb0d2ca072d' 
>>> generate_password_hash('foobar') 
'pbkdf2:sha1:1000$XHj5nlLU$bb9a81bc54e7d6e11d9ab212cd143e768ea6225d' 

इन दो तार अलग; लेकिन पासवर्ड सत्यापित करने के लिए पर्याप्त जानकारी है क्योंकि उत्पन्न नमक प्रत्येक में शामिल है:

# pbkdf2:sha1:1000$tYqN0VeL$2ee2568465fa30c1e6680196f8bb9eb0d2ca072d 
    ^^^^^^^^^^^^^^^^ salt ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
     algo info ^^^^^^^^  actual hash of the password 
    (PBKDF2 applied SHA1 1000 times) 

क्योंकि यादृच्छिक नमक tYqN0VeL है एक और XHj5nlLU के लिए, जिसके परिणामस्वरूप हैश भी अलग है।

foobar पासवर्ड अभी भी या तो हैश के खिलाफ सत्यापित किया जा सकता:

>>> from werkzeug.security import check_password_hash 
>>> check_password_hash('pbkdf2:sha1:1000$tYqN0VeL$2ee2568465fa30c1e6680196f8bb9eb0d2ca072d', 'foobar') 
True 
>>> check_password_hash('pbkdf2:sha1:1000$XHj5nlLU$bb9a81bc54e7d6e11d9ab212cd143e768ea6225d', 'foobar') 
True 

भी देखें

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