2009-09-27 10 views
5

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

पाया कि केडीई library, लेकिन इसकी बहुत बड़ी निर्भरता है, और मैं इसका उपयोग करने के तरीके को समझने के लिए बहुत नौसिखिया प्रोग्रामर हूं।

पासवर्ड संग्रहीत करने के सामान्य तरीके क्या हैं, और मैं अपनी समस्या का समाधान कैसे कर सकता हूं?

उत्तर

7

यह इस बात पर निर्भर करता है कि आप जानकारी के साथ क्या करने जा रहे हैं।

यदि आप कुछ बाहरी सेवा तक पहुंचने के लिए नाम और पासवर्ड का उपयोग करने जा रहे हैं (लेकिन उपयोगकर्ता को अगली बार प्रोग्राम चलाने के बाद जानकारी को पुन: दर्ज करना होगा), तो उन्हें कुछ चरों में संग्रहीत करना ठीक है। उन्हें एन्क्रिप्टेड स्टोर करना बुद्धिमान हो सकता है (कम से कम, पासवर्ड एन्क्रिप्टेड स्टोर करें) ताकि यह कोर डंप या समकक्ष में दिखाई न दे। जब पासवर्ड की आवश्यकता होती है, तो आप इसे डिक्रिप्ट करते हैं, इसका उपयोग करते हैं, और उसके बाद लिखते हैं कि डिक्रिप्ट किए गए संस्करण को संग्रहीत किया गया था (इसे ज़ैप करना)। (नोट: इस संदर्भ में हैशिंग उचित नहीं है; आपको पासवर्ड देखने में सक्षम होना चाहिए, और आप हैश को पूर्ववत नहीं कर सकते हैं।) आप प्रोग्राम के बाहर की जानकारी (डिस्क फ़ाइल में) को स्टोर करने का निर्णय ले सकते हैं, लेकिन यह आवश्यक प्रतीत नहीं होता है। ध्यान दें कि बाइनरी में अभी भी एन्क्रिप्शन कुंजी (और एन्क्रिप्शन एल्गोरिदम) होगा, और एन्क्रिप्टेड डेटा आपके प्रोग्राम की औसत सामग्री से अधिक यादृच्छिक है, इसलिए वास्तव में एन्क्रिप्टेड पासवर्ड को छुपाने के लिए वास्तव में बहुत मुश्किल है (असंभव पर सत्यापन करना)। हालांकि, आप इसे इतना कठिन बना सकते हैं कि यह सबसे निर्धारित हमलावरों के अलावा सभी को रोक देगा।

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


रात वाकर की टिप्पणियां:

मैं कुछ वेब डेटाबेस का उपयोग करने के लिए कि पासवर्ड का उपयोग, इसलिए मैं इसे अपने आवेदन में संग्रहीत के बाद यह पहली बार के लिए दर्ज किया गया है की जरूरत है। क्या आप वाकई एक सादा पाठ फ़ाइल है जो एक विचार स्मार्ट है?

यह इस बात पर निर्भर करता है कि आप 'मेरे आवेदन में संग्रहीत' कैसे हैं। आप निष्पादन योग्य संशोधित नहीं कर सकते हैं, या कम से कम ऐसा करने की कोशिश नहीं करनी चाहिए। इसलिए, आपको इसे निष्पादन योग्य एप्लिकेशन से अलग फ़ाइल में संग्रहीत स्थायी रिकॉर्ड के रूप में देखना होगा। दूसरी तरफ, आपको जो कुछ बताया गया है उससे आपको एक अलग समस्या का सामना करना पड़ता है - आप जानकारी के साथ उपयोगकर्ता को प्रमाणित नहीं कर रहे हैं; आपको अन्य अनुप्रयोगों को भेजने के लिए मांग पर जानकारी को डिक्रिप्ट करने की आवश्यकता है।

सबसे पहले, इसका मतलब है कि लवण और हैंश प्रासंगिक नहीं हैं; आपको मास्किंग ऑपरेशन को उलट करने की आवश्यकता है, और आप एक हैश को उलट नहीं सकते हैं।

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

यदि उपयोगकर्ता को जाने के लिए आपके आवेदन में कुछ पासवर्ड दर्ज करना होगा, तो आप उपयोगकर्ता नाम को एन्क्रिप्ट करने के लिए उस पासवर्ड का उपयोग कर सकते हैं (या इसका हैश, पासवर्ड हैश से एप्लिकेशन को पहचानने के लिए इस्तेमाल किया गया है)/बाहरी अनुप्रयोग के लिए पासवर्ड संयोजन। फिर आप उपयोगकर्ता नाम और तर्क के लिए, एन्क्रिप्टेड पासवर्ड के बेस -64 एन्कोडेड संस्करण को टेक्स्ट फ़ाइल में संग्रहीत कर सकते हैं; यह एप्लिकेशन पासवर्ड के रूप में सुरक्षित है, जो मूल नमकीन हैश प्रारूप में संग्रहीत है। जब उपयोगकर्ता लौटाता है, तो उन्हें अपना एप्लिकेशन उपयोगकर्ता नाम और पासवर्ड प्रदान करना होता है, और आप संग्रहित मानों के विरुद्ध उस संयोजन को मान्य कर सकते हैं, और फिर बाहरी एप्लिकेशन को पासवर्ड डिक्रिप्ट करने के लिए पासवर्ड का उपयोग कर सकते हैं।

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

mkdir ~/.appname 
chmod 700 ~/.appname 
cp /dev/null ~/.appname/app.key 
...store the encrypted information... 
chmod 500 ~/.appname 
chmod 400 ~/.appname/app.key 

इसका कारण यह है, भले ही आप उपयोगकर्ता के नाम के साथ एक निश्चित कुंजी गठबंधन, कहते हैं, संभावना है कि किसी को बाहर काम कर सकते हैं क्या है कि कुंजी है (और एन्क्रिप्शन प्रौद्योगिकी) और यह विपरीत इंजीनियरिंग कर रहे हैं कम संतोषजनक है। (एन्क्रिप्टेड डेटा की गोपनीयता कुंजी पर निर्भर करती है; जब कुंजी प्रोग्राम द्वारा निर्धारित करने योग्य होती है, तो यह एक निर्धारित हमलावर द्वारा भी निर्धारित किया जा सकता है। यह सबसे अच्छा है, उपयोगकर्ता को कुंजी (या पासवर्ड या क्या MySQL या SQLite के बारे में तो आवेदन कुछ भी है कि एक हमलावर ऑफ़लाइन उपयोग कर सकते हैं की दुकान नहीं है

+0

मैं कुछ वेब डेटाबेस तक पहुंचने के लिए उस पासवर्ड का उपयोग करता हूं, इसलिए मुझे इसे पहली बार दर्ज करने के बाद अपने एप्लिकेशन में संग्रहीत करने की आवश्यकता है। क्या आप वाकई सादे पाठ फ़ाइल को समझते हैं? –

+0

इसलिए मुझे लगता है कि यह स्थायी रिकॉर्ड अब तक का सबसे अच्छा विचार है। एप्लिकेशन में कोई अन्य पासवर्ड नहीं है, और यह मीटर नहीं करता है कि अन्य उपयोगकर्ता उस एप्लिकेशन का उपयोग करेंगे। केवल एक चीज पासवर्ड को सहेजने का प्रयास करना है + अन्य पीपीएल से उपयोगकर्ता नाम। –

+0

हां, कुछ स्थायी फ़ाइल में जानकारी संग्रहीत करना आवश्यक होगा। आवेदन के प्रत्येक उपयोगकर्ता के लिए एक अलग फ़ाइल का उपयोग करें; बेस -64 एन्कोडिंग में एन्क्रिप्टेड पासवर्ड स्टोर करें (इसलिए आपके पास एक सादा पाठ फ़ाइल है)। किसी भी क्रिप्टोग्राफ़िक हैश से एन्क्रिप्शन के लिए उपयोग की जाने वाली कुंजी को उपयोगकर्ता की सबसे भरोसेमंद विशेषताओं (शायद उनके उपयोगकर्ता नाम और उपयोगकर्ता आईडी नंबर का एक संयोजन, और शायद कुछ निश्चित टेक्स्ट) माना जाता है, और सुरक्षित रूप से स्टोर करें एक स्थान जैसा आप तैयार कर सकते हैं। सुरक्षा सही से कम है - आप अपने हमलावरों को तैयार कर सकते हैं जो खोज सकते हैं। –

0

यह किस प्रकार का आवेदन है? कई विधियां हैं लेकिन यदि इसका एएसपी.Net वेब.कॉन्फिग फ़ाइल में एन्क्रिप्ट करना आम है।

+0

यह क्रॉस प्लेटफ़ॉर्म सी ++ एप्लिकेशन (कुछ वेब एप्लेट नहीं है) –

5

आमतौर पर आप पासवर्ड का उपयोगकर्ता नाम और एक हैश संस्करण संग्रहीत करते हैं। यह विकिपीडिया आलेख देखें: hash functions, और यह question

+2

पासवर्ड की हैश आपको मदद नहीं करेगा अगर आपको दूरस्थ सिस्टम में लॉग इन करने के लिए बाद में वास्तविक पासवर्ड का उपयोग करने की आवश्यकता है या ऐसा कुछ। –

+0

बिल्कुल ..... – Peter

1

पासवर्ड हैश और उन्हें एक लगातार डेटाबेस में स्टोर, कोई

1

आम; वाक्यांश) रन-टाइम में गुजरती हैं।? बाद में उपयोग के लिए पासवर्ड स्टोर करने की विधि उन्हें कुछ एन्क्रिप्टेड कैश में स्टोर करना है। उस कैश को कुछ मास्टर पासवर्ड का उपयोग करके एन्क्रिप्ट किया जाता है। उपयोगकर्ता को प्रत्येक बार जब आपको कैश से पासवर्ड चाहिए तो मास्टर पासवर्ड दर्ज करना चाहिए। KeePassX एक छोटा ओपन सोर्स एप्लिकेशन है जो मास्टर पासवर्ड का उपयोग करता है व्यक्तिगत डेटा स्टोर करें (उपयोगकर्ता नाम, पी asswords, आदि) यह एक हल्का इंटरफ़ेस है, क्रॉस प्लेटफ़ॉर्म है और जीएनयू जनरल पब्लिक लाइसेंस की शर्तों के तहत प्रकाशित है। आप इसे नमूना के रूप में देख सकते हैं और इसके कुछ हिस्सों का उपयोग कर सकते हैं।

0

spotep.com पर हम केवल उपयोगकर्ता नाम और उपयोगकर्ता नाम के हैशकोड को पासवर्ड के साथ संग्रहीत करते हैं। इसका लाभ यह है कि सिमिलियर (अक्सर तुच्छ) पासवर्ड का परिणाम उसी हैशकोड (जिसे कुकी में संग्रहीत किया जाता है, और इसलिए बहुत असुरक्षित) होता है।

+0

अच्छी वेबसाइट है लेकिन आपने कैप्रिका, बैटलस्टार गैलेक्टिका, अराजकता आदि के बेटों की बहुत सी श्रृंखला याद की है ... –

+0

हम्म, नहीं हम नहीं? –

1

मैं SQLite में एक हैश पासवर्ड संग्रहीत करने का सुझाव दूंगा। फिर जब भी आपको पासवर्ड जांचने की ज़रूरत होती है, तो उसे हैश करें और उसके बाद संग्रहीत मूल्य के विरुद्ध इसकी तुलना करें। यह संग्रहीत पासवर्ड सुरक्षित रखता है ताकि कोई भी (आपको भी नहीं) पता चले कि वे क्या हैं।

1

आप QSettings को आजमा सकते हैं जो लगातार प्लेटफ़ॉर्म-स्वतंत्र एप्लिकेशन सेटिंग्स प्रदान करता है। MySQL का समाधान तब तक अधिक होगा जब तक आपके पास स्टोर करने के लिए सैकड़ों पासवर्ड नहीं हैं।

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