यदि आप दर्ज किए गए उपयोगकर्ता नाम और पासवर्ड को सत्यापित / सत्यापित करने जा रहे हैं, तो Rfc2898DerivedBytes वर्ग (पासवर्ड आधारित कुंजी व्युत्पत्ति फ़ंक्शन 2 या PBKDF2 के रूप में भी जाना जाता है) का उपयोग करें। यह ट्रिपल डेस या एईएस जैसे एन्क्रिप्शन का उपयोग करने से अधिक सुरक्षित है क्योंकि पासवर्ड पर वापस RFC2898DerivedBytes के परिणाम से जाने का कोई व्यावहारिक तरीका नहीं है। आप केवल एक पासवर्ड से परिणाम पर जा सकते हैं। देखें यह जब एन्क्रिप्शन कुंजी और चतुर्थ पासवर्ड स्ट्रिंग से पाने के लिए एक नमक के रूप में पासवर्ड की SHA1 हैश का उपयोग करने के लिए ठीक है? WinRT / मेट्रो के लिए पासवर्ड सी # मेट्रो स्टाइल के साथ .Net या स्ट्रिंग एन्क्रिप्ट / डिक्रिप्ट के लिए एक उदाहरण और चर्चा के लिए ।
यदि आप पासवर्ड को पुनः उपयोग के लिए संग्रहीत कर रहे हैं, जैसे कि इसे किसी तीसरे पक्ष को आपूर्ति करना, Windows डेटा सुरक्षा API (DPAPI) का उपयोग करें । यह ऑपरेटिंग सिस्टम जनरेट और प्रोटेक्टेड कीज़ और ट्रिपल डीस एनक्रिप्शन एल्गोरिथम को एन्क्रिप्ट और डिक्रिप्ट करने वाली जानकारी का उपयोग करता है। इसका अर्थ है कि आपके एप्लिकेशन को एन्क्रिप्शन कुंजियों को बनाने और संरक्षित करने के बारे में चिंता करने की आवश्यकता नहीं है, क्रिप्टोग्राफी का उपयोग करते समय एक बड़ी चिंता।
C # में, System.Security.Cryptography.ProtectedData वर्ग का उपयोग करें । उदाहरण के लिए, डेटा का एक टुकड़ा एन्क्रिप्ट करने के लिए, उपयोग करें ProtectedData.Protect()
:
// Data to protect. Convert a string to a byte[] using Encoding.UTF8.GetBytes().
byte[] plaintext;
// Generate additional entropy (will be used as the Initialization vector)
byte[] entropy = new byte[20];
using(RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider())
{
rng.GetBytes(entropy);
}
byte[] ciphertext = ProtectedData.Protect(plaintext, entropy,
DataProtectionScope.CurrentUser);
एंट्रॉपी और सिफरटेक्स्ट को सुरक्षित रूप से स्टोर करें, जैसे कि किसी फ़ाइल या रजिस्ट्री कुंजी में अनुमतियों के साथ सेट करें ताकि केवल वर्तमान उपयोगकर्ता ही इसे पढ़ सके। मूल डेटा तक पहुँचने के लिए, उपयोग करें ProtectedData.Unprotect()
:
byte[] plaintext= ProtectedData.Unprotect(ciphertext, entropy,
DataProtectionScope.CurrentUser);
ध्यान दें कि अतिरिक्त सुरक्षा विचार हैं। उदाहरण के लिए, पासवर्ड जैसे गुप्त रहस्यों को संग्रहीत करने से बचें string
। स्ट्रिंग्स अपरिवर्तनीय हैं, क्योंकि उन्हें स्मृति में अधिसूचित नहीं किया जा सकता है, इसलिए कोई व्यक्ति एप्लिकेशन की मेमोरी या मेमोरी डंप को देखकर पासवर्ड देख सकता है। उपयोग SecureString या एक बाइट [] के बजाय और निपटान के लिए याद या जैसे ही पासवर्ड अब जरूरत है के रूप में उन्हें शून्य।