पासवर्ड नमकीन है, हाँ। हैशिंग से पहले नमक को पासवर्ड में जोड़ा जाता है, यह सुनिश्चित करने के लिए कि हैश 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
भी देखें
स्रोत
2014-05-02 16:10:32
बाहर निकलता है जब मैं इसे अपने डेटाबेस में संग्रहीत करता था तो मैं इसे छोटा कर रहा था ई। नतीजतन, मैं इसकी तुलना ठीक से नहीं कर सका :-) –
इस प्रश्न पूछने के लिए धन्यवाद - मैं check_password_hash() विधि का उपयोग करने के बजाय तुलना करने के लिए पुनः प्रयास कर रहा था। अन्यथा ऐसा करने के लिए नहीं जाना चाहिए लेकिन सवाल के जवाब के लिए। आप दोनों के लिए उपरोक्त। – JakeJ