2012-04-02 15 views
5

अजगर में मैं उपयोगकर्ता पासवर्ड के लिए हैश बनाने के लिए निम्नलिखित कोड का उपयोग करें:हैश स्ट्रिंग आकार

self.password = hmac.new(security_key, raw_password, sha1).hexdigest() 

अब मैं डेटाबेस को यह मूल्य को बचाने के लिए करना चाहते हैं। मेरा डेटाबेस कॉलम क्या आकार होना चाहिए? यह digest_size संपत्ति से संबंधित प्रतीत होता है, लेकिन यह नहीं पता कि किस ऑब्जेक्ट या क्लास में ऐसी संपत्ति है। sha1 में एक नहीं है।

+0

SHA-1 पासवर्ड हैश के लिए सबसे अच्छा विकल्प नहीं है। यह बहुत तेज़ है, और यह कमजोर माना जाता है (यदि अभी तक टूटा नहीं है)। सर्वश्रेष्ठ अभ्यास कुछ [bcrypt] (http://code.google.com/p/py-bcrypt/) जैसा है, लेकिन यदि आप पाइथन मानक लाइब्रेरी से चिपकना चाहते हैं, तो 'sha256'' sha1' से बेहतर है। –

उत्तर

3

एचएमएसी का आउटपुट हैशिंग एल्गोरिदम पर निर्भर करता है। आपके मामले में, यह sha1 का उपयोग करता है, जो हमेशा RFC2104 के अनुसार 20-बाइट लंबी बाइट स्ट्रिंग आउटपुट करता है। कॉलिंग हेक्सडिजिस्ट() बाइट स्ट्रिंग को एक प्रिंट करने योग्य हेक्स प्रारूप में बदल देता है। 1 बाइट = 2 हेक्स संख्या, तो कुल 40 हेक्स वर्ण हैं। आप सुरक्षित रूप से अपने डेटाबेस कॉलम को चार (40) पर सेट कर सकते हैं।

1

शा -1-हैश फ़ंक्शन का आउटपुट 20 वर्ण लंबा होगा। (RFC2104 के अनुसार, hmac python module docs द्वारा संदर्भित: "... एल SHA-1 के लिए हैश आउटपुट (एल = 16 एम डी 5 के लिए, एल = 20 के बाइट-लंबाई)।")

आप भी इस की पुष्टि कर सकते द्वारा:

import hashlib; 
H = hashlib.sha1("blahblah"); 
print(H.digest_size); 
संबंधित मुद्दे