2010-10-14 14 views
5

मैं अपने कुछ प्रोग्राम विकल्पों को सहेजने के लिए सुविधा सेटिंग्स में निर्मित दृश्य सी # का उपयोग कर रहा हूं। मैं भी एक पासवर्ड स्टोर करना चाहता हूं, लेकिन फिर यह सार्वजनिक आता है ... क्या इस सेटिंग विधि का उपयोग करके इसे सहेजने से पहले पासवर्ड एन्क्रिप्ट करना संभव है और फिर इसे वापस डिक्रिप्ट करना संभव है?सी # सेटिंग्स सुविधा का उपयोग कर पासवर्ड सहेजते समय सबसे अच्छा अभ्यास क्या है?

+0

https://crackstation.net/hashing-security.htm – Soren

उत्तर

4

सरल एन्क्रिप्शन आवश्यकताओं के लिए, मैंने ProtectedData कक्षा के माध्यम से डीपीएपीआई का उपयोग किया है। परिणामी एन्क्रिप्टेड मान को टेक्स्ट फ़ाइल या रजिस्ट्री में आभारी बनाने के लिए, मैं परिणामी बाइट सरणी को एन्कोड करता हूं।

namespace SomeNamespace 
{ 
    using System; 
    using System.Security.Cryptography; 
    using System.Text; 

    /// <summary> 
    /// used for encryption and decryption 
    /// </summary> 
    public static class DataProtector 
    { 
     private const string EntropyValue = "secret"; 

     /// <summary> 
     /// Encrypts a string using the DPAPI. 
     /// </summary> 
     /// <param name="stringToEncrypt">The string to encrypt.</param> 
     /// <returns>The encrypted data.</returns> 
     public static string EncryptData(string stringToEncrypt) 
     { 
     byte[] encryptedData = ProtectedData.Protect(Encoding.Unicode.GetBytes(stringToEncrypt), Encoding.Unicode.GetBytes(EntropyValue), DataProtectionScope.LocalMachine); 
     return Convert.ToBase64String(encryptedData); 
     } 

     /// <summary> 
     /// Decrypts a string using the DPAPI. 
     /// </summary> 
     /// <param name="stringToDecrypt">The string to decrypt.</param> 
     /// <returns>The decrypted data.</returns> 
    public static string DecryptData(string stringToDecrypt) 
     { 
     byte[] decryptedData = ProtectedData.Unprotect(Convert.FromBase64String(stringToDecrypt), Encoding.Unicode.GetBytes(EntropyValue), DataProtectionScope.LocalMachine); 
     return Encoding.Unicode.GetString(decryptedData); 
     } 
    } 
} 
+0

हां, आपके कोड के लिए धन्यवाद मैं इसे अपने आप करने में कामयाब रहा ... मैं तुमसे प्यार करता हूँ !!! –

2

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

हालांकि, यह ईमानदार लोगों को ईमानदार बनाए रखेगा।

इसके लिए मैंने देखा है कि सबसे आम अभ्यास एक चुनौती/प्रतिक्रिया प्रणाली है, जहां उपयोगकर्ता पंजीकरण नाम डालता है, कार्यक्रम एक चुनौती स्ट्रिंग प्रदान करता है, और आप उन्हें संबंधित प्रतिक्रिया स्ट्रिंग (एन्क्रिप्टेड) ​​ईमेल करते हैं, जो कि कार्यक्रम में पंजीकरण संवाद में उपयोगकर्ता कटौती और पेस्ट। कार्यक्रम प्रतिक्रिया को अस्वीकार करता है, इसे चुनौती से तुलना करता है, और आप जाते हैं।

बेशक, चूंकि आपको अभी भी प्रोग्राम में डिक्रिप्शन पासवर्ड प्रदान करना है, फिर भी यह एक निर्धारित हैकर द्वारा पराजित किया जा सकता है।

4

ऐसा करने का एक आसान तरीका पासवर्ड को स्वयं एन्क्रिप्ट करना है। आप इसे कभी भी अनएन्क्रिप्ट नहीं कर पाएंगे, लेकिन आप उपयोगकर्ता द्वारा दर्ज किए गए पासवर्ड की तुलना करने में सक्षम होंगे।

+0

+1 मुझे लगता है कि विचार पसंद:

यहाँ वर्ग मैं इस लपेट के लिए लिखा है। –

+0

क्या आप मुझे एक संकेत दे सकते हैं कि मैं "अपने साथ पासवर्ड एन्क्रिप्ट कैसे कर सकता हूं" ... इसका मतलब क्या है? धन्यवाद। –

+1

मुझे संदेह है कि ओपी पासवर्ड स्टोर करना चाहता है ताकि उपयोगकर्ता को इसे फिर से टाइप करने की आवश्यकता न हो ... यदि ऐसा है, तो यह समाधान बहुत उपयोगी नहीं है;) –

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