2012-05-21 12 views
10

Próbuję przechowywać klucze publiczne i prywatne w pojemniku stosując następujący kod:Lokalizacja kontenera dla kluczy publicznych i prywatnych w systemie Windows?

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

Co chciałbym wiedzieć, jest położenie pojemnika. Czy lokalizacja kontenera w systemie plików?

+0

Najprawdopodobniej w katalogu twojego .exe – om471987

+2

nie mogę pobrać żadnego nowego pliku wewnątrz mojego katalogu exe. – Thabo

Odpowiedz

19

Znajdziesz kluczowe pliki w następującym katalogu (*):

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

można uzyskać nazwę pliku dla danego klucza w następujący sposób:

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

nie wierzę ta informacja jest udokumentowana, więc jeśli jej użyjesz, będziesz polegać na nieudokumentowanych szczegółach implementacji, które mogą nie działać w przyszłych wersjach systemu Windows. Niestety, czasami trzeba z niego korzystać; na przykład as noted in this question, nie sądzę, że istnieje inny wiarygodny sposób wyświetlania uprawnienia do kontenera kluczowego RSA z konta nieuprawnionego.

(*) dla kluczy maszynowych. klawisze specyficzne dla użytkownika są przypuszczalnie pod Environment.SpecialFolder.LocalApplicationData

+0

Dzięki .. masz rację, nie mogłem znaleźć udokumentowanych informacji na MSDN. W przyszłości może być przestarzałe.: D.Dzięki znowu – Thabo

+5

Dla mnie ta ścieżka rozwiązała się do 'C: \ ProgramData \ Microsoft \ Crypto \ RSA \ MachineKeys ' –

+0

Klucze użytkownika znajdują się w katalogu w obszarze Environment.SpecialFolder.ApplicationData –

2

użyłem Process Monitor i Sn.exe (Strong Name Tool) nauczyć się lokalizację folderu na moim komputerze Windows 7, który zawiera moje pliki kluczy, a tym samym potwierdzić informacji w Joe's answer.

Najpierw ran monitora procesu i określono następujące filtr:

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

Następnie ran Strong nazwa narzędzia (sn.exe) i sztyletem; wydobyć klucz publiczny z pary kluczy w moim zbiorniku VS_KEY_773685D47C32F8C7 i wyeksportować go do public_key.snk:

sn.exe -pc VS_KEY_773685D47C32F8C7 public_key.snk 

Po wykonaniu więc zauważyć, że Process Monitor wskazuje, że sn.exe dokonał kilku żądań dostępu do folderu:

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

... i plik, który zawiera klucze publiczne i prywatne na moim kontenera nazwie VS_KEY_773685D47C32F8C7:

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

& sztylet;sn.exe można wygodnie uruchomić za pomocą Developer Command Prompt for Visual Studio.

Powiązane problemy