क्या इस तरह की समस्या के लिए आगे का रास्ता सिफारिश की? "अप्रचलित" कॉल का उपयोग करना जारी रखना स्पष्ट रूप से सुझाया गया पथ नहीं है, इसलिए इसे "सदस्यता एपीआई का उपयोग करने" के अलावा किसी अन्य चीज़ द्वारा प्रतिस्थापित किया गया है?
सबसे अच्छा तरीका है (जो आप की संभावना से इनकार किया है) विशुद्ध रूप से .नेट फ्रेमवर्क के भीतर पासवर्ड PBKDF2, Bcrypt, या Scrypt द्वारा टुकड़ों में बांटा है करने के लिए सब कुछ के साथ बदल रहा है। पीबीकेडीएफ 2 को Rfc2898DeriveBytes Class द्वारा .NET में प्रदान किया गया है।
दूसरा सबसे अच्छा तरीका है पासवर्ड के दो "संस्करण" के साथ खत्म करने के लिए है:
- संस्करण 0 वर्ष HashPasswordForStoringInConfigFile हो गया होता, लेकिन आप संस्करण 1 के लिए थोक, ऑफ़लाइन में उन लोगों के, को अद्यतन करने और निकाल सकते हैं किसी भी व्यक्ति ने उन्हें चुरा लेने से पहले उन पुराने हैंश को पूरा किया है और आप 9 0 के पुरानी पासवर्ड हैशिंग के रूप में व्यापार समाचार में समाप्त हो गए हैं।
- संस्करण 1, जो मौजूदा हैशपासवर्डफोरस्टोरिंग कॉन्फ़िगरफ़ाइल मूल्य का पीबीकेडीएफ 2 है! अर्थात। आप अपने वर्तमान पुराने पुराने हैंश, और पीबीकेडीएफ 2 उन्हें एक नए यादृच्छिक नमक और पुनरावृत्तियों की एक बड़ी संख्या के साथ लेते हैं, और परिणाम संग्रहित करते हैं। फिर, जब कोई उपयोगकर्ता लॉग इन करना चाहता है, तो आप अपने पासवर्ड को रिचर्डबैजेंट कोड पर फ़ीड करते हैं, इसलिए आपके पास हैशपैसवर्डफोरस्टोरिंग कॉन्फिफफाइल वापस आ गया होगा, और फिर आप उस परिणाम के लिए पीबीकेडीएफ 2 लागू करते हैं!
- अर्थात यह वास्तव में Rfc2898DeriveBytes (HashPasswordForStoringInConfigFile (पासवर्ड)), PerUserSalt, YourIterations)
- संस्करण 2 है, जो जो संस्करण 1 हैश है उन करने के लिए उन्नत कर रहे हैं।"संस्करण" को छोड़कर सभी कॉलम समान हैं, लेकिन जब आप संस्करण 1 की गणना और सत्यापन करते हैं, तो आप Rfc2898DeriveBytes (पासवर्ड), PerUserSalt, YourIterations) की गणना करते हैं और संस्करण 2 हैश को संस्करण 2 हैश के साथ प्रतिस्थापित करते हैं (और संस्करण को 2 में बदलते हैं, बेशक)।
तीसरे सबसे अच्छा तरीका है दूसरा सबसे अच्छा तरीका है, लेकिन केवल संस्करण 1. से सावधान रहें, इस तरह से निहित है DCC2 पागलपन - आप नए एल्गोरिदम के अंदर अपने पुराने उत्पादन लपेटकर
दोनों ही मामलों में रखने के लिए, आप ' करूँगा डेटाबेस में PBKDF2-HMAC-SHA-1 परिणाम भंडारण किया है, तो आप की आवश्यकता होगी:
- पासवर्ड हैश (बाइनरी (20)) - PBKDF2 उत्पादन यानी।
- आपका नमक (बाइनरी (16), RNGCryptoServiceProvider Class द्वारा प्रति-उपयोगकर्ता उत्पन्न)
- वैकल्पिक: PBKDF2 पुनरावृत्तियों की संख्या (INT, हजारों में शुरू करने और ऊपर जाने के लिए बस से पहले अपने सर्वर सीपीयू अधिकतम पर बाध्य हो जाएगा भार; बढ़ोतरी के रूप में वृद्धि करें क्योंकि आपके हार्डवेयर को अपग्रेड किया गया है)
- यह हर बार जब कोई उपयोगकर्ता अपने (सही) पासवर्ड में प्रवेश करता है तो यह आपके सुरक्षा स्तर को पारदर्शी रूप से बढ़ाने की अनुमति देता है। पहले इसे सही करने के लिए सही है, फिर इसे उच्च पुनरावृत्ति गणना
के साथ फिर से धोना
- वैकल्पिक: एक "संस्करण" (TINYINT) ताकि बाद में एक और एल्गोरिदम में अपग्रेड करना आसान हो, पाप सीई आप एक बार में एक से अधिक संस्करण सक्रिय हो सकते हैं।
पीएस संस्करण 1 या संस्करण 2 के लिए नए एल्गोरिथ के लिए, या तो पीबीकेडीएफ 2-एचएमएसी-एसएचए 256, पीबीकेडीएफ 2-एचएमएसी-एसएचए 512, और इसी तरह से सक्षम एक .NET लाइब्रेरी बनाई गई; my Github repository में परीक्षण वैक्टरों के एक उचित सेट के साथ इसका एक संस्करण शामिल है।
स्रोत
2014-02-25 04:19:52
HashPasswordForStoringInConfigFile पुराना है, का उपयोग क्यों नहीं कर सकते हैं और किसी के लिए एक स्थानापन्न विकल्प तो सुझाव देने के लिए वे जानना चाहते हैं 2 पैरामीटर यह "MD5" या "SHA1" है? हां, मुझे पता है कि यह पोस्ट ओल्ड है लेकिन मैं इसे भर में ठोकर खाई क्योंकि मैंने कई वर्षों में 'हैशपास्वर्डफॉरस्टोरिंग कॉन्फिफफाइल' का उपयोग नहीं किया था। नमक + पासवर्ड के लिए SHA1 प्रतिस्थापन ठीक हैं - लेकिन 2016 में इस बिंदु पर SHA1 के साथ रहना सिर्फ एक बुरा विचार है भयानक MD5 –