python नमक और हैश पाइथन में एक पासवर्ड है




authentication hash (5)

इसके लिए पाइथन 3 में काम करने के लिए आपको उदाहरण के लिए यूटीएफ -8 एन्कोड की आवश्यकता होगी:

hashed_password = hashlib.sha512(password.encode('utf-8') + salt.encode('utf-8')).hexdigest()

अन्यथा आप पाएंगे:

ट्रेसबैक (सबसे हालिया कॉल अंतिम):
फाइल "", लाइन 1, में
hashed_password = hashlib.sha512 (पासवर्ड + नमक) .hexdigest ()
TypeError: यूनिकोड-ऑब्जेक्ट्स को हैशिंग से पहले एन्कोड किया जाना चाहिए

इस कोड को नमक के साथ एक पासवर्ड हैश माना जाता है। नमक और हैश पासवर्ड डेटाबेस में सहेजा जा रहा है। पासवर्ड स्वयं नहीं है।

ऑपरेशन की संवेदनशील प्रकृति को देखते हुए, मैं यह सुनिश्चित करना चाहता था कि सब कुछ कोशेर था।

नोट: मैं आदत से बाहर b64encode के यूआरएल सुरक्षित संस्करण का उपयोग करें।

import hashlib
import base64
import uuid

password = 'test_password'
salt     = base64.urlsafe_b64encode(uuid.uuid4().bytes)


t_sha = hashlib.sha512()
t_sha.update(password+salt)
hashed_password =  base64.urlsafe_b64encode(t_sha.digest())

मैं 'पुराने धागे को पुनर्जीवित करना चाहता हूं, लेकिन ... कोई भी जो आधुनिक आधुनिक अद्यतित समाधान का उपयोग करना चाहता है, Argon2 का उपयोग करें।

https://pypi.python.org/pypi/argon2_cffi

यह पासवर्ड हैशिंग प्रतियोगिता जीता। ( https://password-hashing.net/ ) bcrypt से उपयोग करना आसान है, और यह bcrypt से अधिक सुरक्षित है।


संपादित करें: यह उत्तर गलत है। पासवर्ड स्टोर करने के लिए क्रिप्टोग्राफ़िक हैश का उपयोग न करें। एक पासवर्ड हैश का प्रयोग करें।

मेरे द्वारा ठीक लग रहा है। हालांकि, मुझे पूरा यकीन है कि आपको वास्तव में बेस 64 की आवश्यकता नहीं है। आप बस यह कर सकते हैं:

import hashlib, uuid
salt = uuid.uuid4().hex
hashed_password = hashlib.sha512(password + salt).hexdigest()

यदि यह कठिनाइयों का निर्माण नहीं करता है, तो आप नमक भंडारण के बजाय कच्चे बाइट्स के रूप में नमक को संग्रहित करके और अपने पासवर्ड में थोड़ा अधिक कुशल संग्रहण प्राप्त कर सकते हैं। ऐसा करने के लिए, hex को bytes और hexdigest digest साथ बदलें।


यदि आप किसी मौजूदा सिस्टम द्वारा संग्रहीत हैंश का उपयोग करने की आवश्यकता है तो passlib उपयोगी प्रतीत होता है। यदि आपके पास प्रारूप का नियंत्रण है, तो एक आधुनिक हैश का उपयोग करें जैसे कि bcrypt या scrypt। इस समय, पाइथन से उपयोग करने के लिए bcrypt बहुत आसान लगता है।

passlib bcrypt का समर्थन करता है, और यह बैकएंड के रूप में py-bcrypt को स्थापित करने की अनुशंसा करता है: http://pythonhosted.org/passlib/lib/passlib.hash.bcrypt.html

यदि आप पासलिब स्थापित नहीं करना चाहते हैं तो आप सीधे py-bcrypt उपयोग भी कर सकते हैं। रीडमे में बुनियादी उपयोग के उदाहरण हैं।

यह भी देखें: पाइथन में पासवर्ड और नमक के लिए हैश उत्पन्न करने के लिए स्क्रिप का उपयोग कैसे करें


स्मार्ट चीज खुद को क्रिप्टो लिखना नहीं है बल्कि पासलिब जैसे कुछ का उपयोग करना है: https://bitbucket.org/ecollins/passlib/wiki/Home

अपने क्रिप्टो कोड को सुरक्षित तरीके से लिखना गड़बड़ करना आसान है। बुरा बात यह है कि गैर क्रिप्टो कोड के साथ आप अक्सर इसे तुरंत देखते हैं जब यह आपके प्रोग्राम क्रैश होने के बाद से काम नहीं कर रहा है। क्रिप्टो कोड के साथ आप अक्सर देर से होने के बाद ही पता लगाते हैं और आपके डेटा से समझौता किया गया है। इसलिए मुझे लगता है कि किसी और द्वारा लिखे गए पैकेज का उपयोग करना बेहतर है जो इस विषय के बारे में जानकार है और जो युद्ध परीक्षण प्रोटोकॉल पर आधारित है।

इसके अलावा पासलिब में कुछ अच्छी विशेषताएं हैं जो इसे उपयोग करने में आसान बनाती हैं और एक पुराने पासवर्ड हैशिंग प्रोटोकॉल में अपग्रेड करना भी आसान होता है यदि कोई पुराना प्रोटोकॉल टूटा हुआ हो जाता है।

इसके अलावा sha512 का एक भी दौर शब्दकोश हमलों के लिए अधिक असुरक्षित है। sha512 को तेज़ होने के लिए डिज़ाइन किया गया है और पासवर्ड को सुरक्षित रूप से स्टोर करने का प्रयास करते समय यह वास्तव में एक बुरी बात है। अन्य लोगों ने इस तरह के सभी मुद्दों के बारे में लंबे और कठिन विचार किया है ताकि आप इसका लाभ उठा सकें।





salt