मेरे पास स्थिर उपयोगिता वर्ग बनाने का उच्च-स्तरीय लक्ष्य है जो मेरे .NET अनुप्रयोग के लिए एन्क्रिप्शन को समाहित करता है। अंदर मैं ऑब्जेक्ट रचनाओं को कम करना चाहता हूं जो आवश्यक नहीं हैं।.NET एन्क्रिप्शन कक्षाओं की थ्रेड सुरक्षा?
मेरा प्रश्न है: कक्षाओं की थ्रेड-सुरक्षा क्या है जो .NET Framework के भीतर सममित एन्क्रिप्शन को लागू करती है? विशेष रूप से System.Security.Cryptography.RijndaelManaged
और ICryptoTransform
प्रकार उत्पन्न करता है।
उदाहरण के लिए, मेरे वर्ग निर्माता में मैं बस निम्नलिखित पंक्तियों के साथ कुछ कर सकता हूं?
static MyUtility()
{
using (RijndaelManaged rm = new RijndaelManaged())
{
MyUtility.EncryptorTransform = rm.CreateEncryptor(MyUtility.MyKey, MyUtility.MyIV);
MyUtility.DecryptorTransform = rm.CreateDecryptor(MyUtility.MyKey, MyUtility.MyIV);
}
}
साइड-कदम का मुद्दा यह कुंजी के लिए सुरक्षित और चतुर्थ इस वर्ग भीतर मौजूद हैं, इस उदाहरण ब्लॉक अन्य प्रश्न के एक नंबर लाता है:
मैं लगातार पुन: उपयोग कर सकते हैं एन्क्रिप्टर ट्रान्सफॉर्म और डिक्रिप्टर ट्रांसफॉर्म ओवर और ओवर?
*.CanReuseTransform
और*.CanTransformMultipleBlocks
गुण "हां" का अर्थ है, लेकिन क्या कोई चेतावनी है जिसके बारे में मुझे अवगत होना चाहिए?RijndaelManaged
के बाद से लागू करताIDisposable
मेरी झुकाव एकusing
ब्लॉक खासकर जब से यह शायद बाहरी ओएस-स्तर libs में बांध के अंदर डाल दिया है। क्या इसके साथ कोई चेतावनी है क्योंकि मैंICryptoTransform
ऑब्जेक्ट्स को आसपास रख रहा हूं?अत्यधिक बहुप्रचारित वातावरण में संभावित रूप से सबसे महत्वपूर्ण सवाल, क्या मैं
ICryptoTransform
धागे के बीच वस्तुओं को साझा करने के साथ मुद्दों में भाग लेगा?यदि # 3 का उत्तर यह है कि यह थ्रेड-सुरक्षित नहीं है, तो क्या मैं
ICryptoTransform
ऑब्जेक्ट्स का उपयोग करते समय लॉकिंग से गंभीर प्रदर्शन में गिरावट का अनुभव करूंगा? (मुझे लगता है कि भार पर निर्भर करता है।)क्या यह हर बार नए
RijndaelManaged
को तुरंत चालू करने के लिए अधिक सक्षम होगा? या एकRijndaelManaged
स्टोर करें और हर बारnew RijndaelManaged().CreateEncryptor(...)
उत्पन्न करें?
मुझे उम्मीद है कि वहां कोई व्यक्ति जानता है कि यह काम हुड के नीचे कैसे काम करता है या इसी तरह के कार्यान्वयन से मुद्दों के साथ अनुभव किया जाता है। मैंने पाया है कि इस तरह के कई प्रकार के प्रदर्शन और थ्रेड-संबंधित मुद्दे आम तौर पर तब तक प्रकट नहीं होते जब तक कि बड़ी मात्रा में भार न हो।
धन्यवाद!
अच्छी ध्वनि सलाह। मुझे लगता है कि मैंने धारणा बनाई है कि इन वस्तुओं में से कुछ को बनाना और नष्ट करना नौसेनात्मक प्लेटफार्म एसडीके कक्षाओं पर अंतर्निहित निर्भरताओं के कारण लागत पर आया था। यदि कोई भी सोचता है कि यह एक जरूरी चिंता नहीं है, तो ऐसा लगता है कि सिंक्रनाइज़ेशन तंत्र अंत में बड़ी बाधा बन सकता है। – mckamey
सच है कि आपको समय-समय पर अनुकूलन करने में समय नहीं बिताना चाहिए, लेकिन बस यहां छोड़ना चाहते हैं कि हमारे मामले में हमने पाया कि ~ 500 छोटे एन्क्रिप्शन (सभी एक ही पासवर्ड के साथ) करने में लगभग 10 सेकंड लग गए थे जो आपदा थी। लगभग हर समय एन्क्रिप्टर बनाने में खर्च किया गया था। ICryptoTransforms का पुन: उपयोग करना स्पष्ट समाधान था। – Bernard
मेरे 2 सेंट, मैंने पाया कि _not_ आईसीआरपीटी ट्रान्सफॉर्म का पुन: उपयोग करने से हमारे आवेदन का बहुत खराब प्रदर्शन हुआ। – gorillapower