.NET

2008-09-30 6 views
15

का उपयोग करके एन्क्रिप्टेड डेटा का निरंतर भंडारण मुझे एप्लिकेशन रनों के बीच एन्क्रिप्टेड डेटा (कुछ छोटे तार) स्टोर करने की आवश्यकता है। मैं नहीं चाहता कि उपयोगकर्ता हर बार एक पासफ्रेज प्रदान करे, जिसने एप्लिकेशन को लॉन्च किया है। अर्थात। आखिरकार यह एन्क्रिप्शन कुंजी सुरक्षित रूप से संग्रहीत करने के लिए नीचे चला जाता है।.NET

मैं RSACryptoServiceProvider में देख रहा था और PersistentKeyInCsp का उपयोग कर रहा था, लेकिन मुझे यकीन नहीं है कि यह कैसे काम करता है। एप्लिकेशन रन या मशीन पुनरारंभ के बीच लगातार महत्वपूर्ण कंटेनर है? यदि हां, तो यह उपयोगकर्ता विशिष्ट है, या मशीन विशिष्ट है। अर्थात। अगर मैं उपयोगकर्ता के रोमिंग प्रोफाइल में अपना एन्क्रिप्टेड डेटा संग्रहीत करता हूं, तो क्या उपयोगकर्ता डेटा को डिक्रिप्ट कर सकता है यदि उपयोगकर्ता एक अलग मशीन पर लॉग ऑन करता है?

यदि उपर्युक्त काम नहीं करता है, तो मेरे विकल्प क्या हैं (मुझे रोमिंग प्रोफाइल से निपटने की आवश्यकता है)।

उत्तर

35

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

DPAPI System.Security.Cryptography.ProtectedData वर्ग के साथ .NET में सामने आ रहा है:

byte[] plaintextBytes = GetDataToProtect(); 
byte[] encodedBytes = ProtectedData.Protect(plaintextBytes, null, DataProtectionScope.CurrentUser); 

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

, डिक्रिप्ट ProtectedData.Unprotect कॉल का उपयोग करें:

byte[] encodedBytes = GetDataToUnprotect(); 
byte[] plaintextBytes = ProtectedData.Unprotect(encodedBytes, null, DataProtectionScope.CurrentUser); 

DPAPI प्रोफाइल रोमिंग (के रूप में वर्णित here), हालांकि आप एक ही स्थान पर एन्क्रिप्टेड डाटा स्टोर करने की आवश्यकता होगी के साथ ठीक से काम करता (साझा नेटवर्क, IsolatedStorageScope.Roaming, आदि के साथ पृथक स्टोरेज) कि आपकी विभिन्न मशीनें एक्सेस कर सकती हैं।

अधिक जानकारी के लिए एमएसडीएन में संरक्षित डेटा वर्ग देखें। एक डीपीएपीआई श्वेत पत्र here है, जो आप चाहते हैं उससे अधिक जानकारी के साथ।

+0

बस भावी पीढ़ी के लिए, आप अन्य कोड की जांच के लिए बने इसे कहीं अधिक "सार्वजनिक" (कम से कम उदाहरण के लिए अपने इंट्रानेट पर) तो वे इसे करने के लिए से प्राप्त कर सकते हैं संभाल करने के लिए होगा अन्य मशीनें आम तौर पर आप मशीन-और-उपयोगकर्ता-विशिष्ट स्थान प्राप्त करने के लिए Environment.SpecialFolder.AplicationData का उपयोग कर सकते हैं। –

+0

उत्तर के लिए धन्यवाद, यह काम करना चाहिए। क्या आपको पता है कि यह 1.1 में कैसे किया जा सकता है? .NET 2.0 –

+1

.NET 1.1 में DPAPI का उपयोग करने के लिए संरक्षित डेटा नया है, आपको पी/Invoke का उपयोग करने की आवश्यकता होगी।एक पूर्ण पूर्ण रन-थ्रू के लिए यहां देखें: http://msdn.microsoft.com/en-us/library/aa302402.aspx –

0

मैं डीपीएपीआई दृष्टिकोण में जोड़ना चाहता हूं।

हालांकि मैंने उपयोगकर्ता-स्टोर दृष्टिकोण को स्वयं लागू नहीं किया है, तो उपयोगकर्ता-स्टोर दृष्टिकोण के लिए माइक्रोसॉफ्ट प्रलेखन है जो एक विशिष्ट उपयोगकर्ता के लिए डेटा को एन्क्रिप्ट और डिक्रिप्ट करता है।

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

एक साइड नोट के रूप में, डीपीएपीआई ट्रिपल-डीईएस का उपयोग करता है जो थोड़ा कमजोर (एईएस से) हो सकता है, लेकिन तब मुझे यकीन नहीं है कि आप किस प्रकार की सुरक्षा की तलाश में हैं।

विंडोज डेटा संरक्षण http://msdn.microsoft.com/en-us/library/ms995355.aspx

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