2012-05-21 39 views
10

मैं एक कंटेनर निम्नलिखित कोड का उपयोग करने में मेरी सार्वजनिक और निजी कुंजियों स्टोर करने के लिए कोशिश कर रहा हूँ:विंडोज में सार्वजनिक और निजी कुंजी के लिए कंटेनर का स्थान?

CspParameters cp = new CspParameters(); 
cp.KeyContainerName = "Test"; 
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cp); 

क्या मैं जानना चाहते हैं कंटेनर का स्थान है। फाइल सिस्टम में कंटेनर का स्थान है?

+0

संभवतः आपके .exe – om471987

+2

की निर्देशिका में कोई भी मुझे अपने exe निर्देशिका के अंदर कोई नई फ़ाइल नहीं मिलती है। – Thabo

उत्तर

19

आप (*) निम्न निर्देशिका में महत्वपूर्ण फाइलों को मिल जाएगा:

Path.Combine(
    Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), 
    @"Microsoft\Crypto\RSA\MachineKeys") 

आप इस प्रकार किसी कुंजी के लिए फ़ाइल नाम प्राप्त कर सकते हैं:

CspParameters cp = ...; 
CspKeyContainerInfo info = new CspKeyContainerInfo(cp); 
string fileName = info.UniqueKeyContainerName; 

मैं नहीं मानता यह जानकारी दस्तावेज है, इसलिए यदि आप इसका उपयोग करते हैं तो आप अनियंत्रित कार्यान्वयन विवरणों पर भरोसा करेंगे जो विंडोज के भविष्य के संस्करणों में काम नहीं कर सकते हैं। दुर्भाग्यवश, इसे कभी-कभी उपयोग करने के लिए आवश्यक है; उदाहरण के लिए as noted in this question, मुझे नहीं लगता कि एक गैर-विशेषाधिकार प्राप्त खाते से आरएसए कुंजी कंटेनर के लिए अनुमतियां देखने का कोई अन्य विश्वसनीय तरीका है।

(*) जो कि मशीन कुंजी के लिए है। उपयोगकर्ता-विशिष्ट कुंजी शायद Environment.SpecialFolder.LocalApplicationData

+0

धन्यवाद..तुम सही हो, मुझे एमएसडीएन पर दस्तावेजी सूचना नहीं मिली। भविष्य में यह अप्रचलित हो सकता है .: डी। फिर से धन्यवाद – Thabo

+5

मेरे लिए यह पथ 'C: \ ProgramData \ Microsoft \ Crypto \ RSA \ MachineKeys को हल किया गया है ' –

+0

उपयोगकर्ता-विशिष्ट कुंजी पर्यावरण के अंतर्गत निर्देशिका में हैं। SpecialFolder.AplicationData –

2

के तहत मैं Process Monitor और Sn.exe (Strong Name Tool) इस्तेमाल किया है कि मेरे कुंजी फ़ाइलें हैं मेरी विंडोज 7 मशीन पर फ़ोल्डर का स्थान जानने के लिए और इस तरह Joe's answer में जानकारी की पुष्टि कर रहे हैं।

पहले, मैं प्रक्रिया मॉनिटर भाग गया और निम्न फ़िल्टर निर्दिष्ट:

Column Relation Value Action 
--------------------------------------- 
Path  contains crypto Include 

मैं तो भाग गया सशक्त नाम उपकरण (sn.exe) और कटार; मेरी कंटेनर VS_KEY_773685D47C32F8C7 में कुंजी युग्म से सार्वजनिक कुंजी निकालने और public_key.snk को निर्यात करने के लिए: ऐसा करने के बाद

sn.exe -pc VS_KEY_773685D47C32F8C7 public_key.snk 

मैं विख्यात प्रक्रिया मॉनिटर संकेत दिया है कि कि sn.exe फ़ोल्डर में कई पहुँच अनुरोध किया:

C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys 

... और फ़ाइल है कि मेरे कंटेनर VS_KEY_773685D47C32F8C7 नामित के लिए मेरी सार्वजनिक और निजी कुंजियों शामिल हैं:

C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\74c2c10a37baa69f7969c7144db5805d_c55067c2-4a01-4792-9d70-d7a6e4799447 

और डैगर;sn.exe आसानी से Developer Command Prompt for Visual Studio के माध्यम से चलाया जा सकता है।