मैं विंडोज़ पर आरएसए कुंजी जोड़े प्रबंधित करने के लिए एक उपकरण बना रहा हूं क्योंकि इसके लिए कोई अंतर्निहित कार्यक्षमता नहीं है और हम आरएसए एन्क्रिप्शन सुविधाओं का व्यापक उपयोग करते हैं। नेट।RSACryptoServiceProvider का उपयोग कर एक्सएमएल से आरएसए सार्वजनिक कुंजी आयात करना संपत्ति को सार्वजनिक रूप से झूठी
यह उपकरण मौजूदा आरएसए कुंजी जोड़े को सूचीबद्ध करने, नई चाबियाँ बनाने, चाबियाँ हटाने, चाबियाँ निर्यात करने और पहले बनाए गए एक्सएमएल निर्यात (एएसपीनेट_आरईजीआईआईएस.एक्सईई का उपयोग करके निर्यात) से आयात करने वाली कुंजी जैसे विभिन्न कार्यों को प्रदान करता है।
मेरे पास केवल एन्क्रिप्शन संचालन के लिए केवल सार्वजनिक कुंजी आयात करने के अलावा काम करने वाली सभी कार्यक्षमताएं हैं। जब मुख्य जोड़े मूल रूप से सर्वर पर बनाए जाते हैं, तो सार्वजनिक और सार्वजनिक/निजी निर्यात दोनों aspnet_regiis.exe
का उपयोग कर XML पर किए जाते हैं।
मैं निजी मशीनों को पूरी तरह से आवश्यक होने तक वितरित होने से रोकने के लिए अन्य मशीनों पर कॉन्फ़िगरेशन फ़ाइलों को एन्क्रिप्ट करने का विकल्प प्रदान करने के लिए उत्सुक हूं।
प्रत्येक बार जब मैं प्रीवीउल्सी निर्यात किए गए एक्सएमएल ब्लॉक से PublicOnly
संपत्ति की संपत्ति से सार्वजनिक कुंजी आयात करता हूं तो यह संकेत मिलता है कि कुंजी जोड़ी में सार्वजनिक और निजी कुंजी है। मैंने पुष्टि की है कि एक्सएमएल में निजी कुंजी जानकारी नहीं है इसलिए समस्या xml फ़ाइल के भीतर नहीं है।
समस्या CspParameters
ऑब्जेक्ट का उपयोग करते समय और CspProviderFlags.UseMachineKeyStore
के रूप में ध्वज निर्दिष्ट करते समय समस्या उत्पन्न होती है। यदि आप RSACryptoServiceProvider
किसी भी सीएसपी पैरामीटर निर्दिष्ट किए बिना बनाते हैं और फिर xml से कुंजी आयात करते हैं, तो PublicOnly
संपत्ति सही ढंग से गलत पर सेट होती है।
String xmlText = File.ReadAllText(filePath);
RSACryptoServiceProvider csp = new RSACryptoServiceProvider();
csp.FromXmlString(xmlText);
//csp.PublicOnly equals true;
लेकिन जब से मैं तो यह एन्क्रिप्शन संचालन मैं जब एक RSACryptoServiceProvider
निर्माण CspParameters
वस्तु का उपयोग करने के लिए मजबूर कर रहा हूँ के लिए बाद में इस्तेमाल किया जा सकता के रूप में वहाँ कोई दूसरा रास्ता कुंजी नाम के लिए है यह कुंजी कंटेनर एक नाम देने की जरूरत है कंटेनर।
String xmlText = File.ReadAllText(filePath);
CspParameters cspParams = new CspParameters();
cspParams.Flags = CspProviderFlags.UseMachineKeyStore;
cspParams.KeyContainerName = keyContainerName;
RSACryptoServiceProvider csp = new RSACryptoServiceProvider(cspParams);
csp.PersistKeyInCsp = true;
csp.FromXmlString(xmlText);
//csp.PublicOnly equals false;
मैंने इस कोड के विभिन्न संस्करणों को आजमाया है, हालांकि समस्या बनी हुई है। मुझे लगता है कि RSA Encryption public key not returned from container? जैसे समान प्रश्न हैं, हालांकि मुझे विश्वास है कि यह मुद्दा अलग है और कोई संतोषजनक उत्तर कभी नहीं दिया गया है।
सवाल इसलिए है कि मैं एक्सएमएल से आरएसए सार्वजनिक कुंजी कैसे आयात कर सकता हूं और मुख्य कंटेनर को एक नाम दे सकता हूं जबकि कंटेनर में केवल एक सार्वजनिक कुंजी जोड़ी मौजूद हो?
संपादित इस क्षेत्र के आसपास
इसके अलावा अनुसंधान भी जब एक्सएमएल से पूर्ण कुंजी आयात और भी झंडे की स्थापना कुंजी के निर्यात की अनुमति देने के लिए एक समस्या को दर्शाता है।
CspProviderFlags.UseArchivableKey;
इस ध्वज सीएसपी पैरामीटर पर निर्दिष्ट किया जाता है जब प्रकार लाइन csp.FromXmlString(xmlText)
पर फेंक दिया जाता है "अवैध निर्दिष्ट फ़्लैग" का एक अपवाद वस्तु;
मैं वास्तव में इसे समझा नहीं सकता। कुंजी बनाया गया था और पहले एक्सएमएल को निर्यात किया गया था, निश्चित रूप से यदि कुंजी पहले निर्यात किया गया है तो इसे आयात करना संभव है और इसे फिर से निर्यात करने की अनुमति होनी चाहिए?
मैंने इस पर बहुत सारे शोध किए हैं लेकिन इन समस्याओं में से किसी एक का जवाब नहीं देख सकता है।
मैंने PROV_RSA_FULL से PROV_RSA_AES तक csp प्रदाता प्रकार को बदलने का प्रयास किया है क्योंकि मुझे लगता है कि यह अब डिफ़ॉल्ट है और मुझे लगता है कि कुंजी मूल रूप से PROV_RSA_FULL के बजाय इसका उपयोग करके बनाई गई हो सकती है लेकिन इससे कोई फर्क नहीं पड़ता है।