2010-02-16 2 views
9

공개/개인 키 쌍의 공개 키만 저장할 때 컴퓨터 수준 RSA 키 컨테이너를 사용하는 데 문제가 있습니다.기계 수준 RSA 키 컨테이너에 공개 키를 저장하는 방법

다음 코드는 공개/개인 쌍을 만들고 해당 쌍에서 공개 키를 추출합니다. 쌍과 공개 키는 별도의 키 컨테이너에 저장됩니다. 그런 다음 해당 키 컨테이너에서 키를 가져 오면 컨테이너로 들어오는 키와 동일해야합니다. CspProviderFlags.UseDefaultKeyContainer가 (즉, 키가 다시 밖으로 PublicKey의 용기로부터 판독 동일) CspParameters.Flags 지정된 있지만 CspProviderFlags.UseMachineKeyStoreCspParameters.Flags 지정한 경우 키 다르다 다시 의 PublicKey 읽을 때

코드는 작동한다.

동작이 다른 이유는 무엇이며, 컴퓨터 수준의 RSA 키 컨테이너에서 공개 키를 검색하려면 어떻게해야합니까?

var publicPrivateRsa = new RSACryptoServiceProvider(new CspParameters() 
{ 
    KeyContainerName = "PublicPrivateKey", 
    Flags = CspProviderFlags.UseMachineKeyStore 
    //Flags = CspProviderFlags.UseDefaultKeyContainer 
} 
    ) 
{ 
    PersistKeyInCsp = true, 

}; 

var publicRsa = new RSACryptoServiceProvider(new CspParameters() 
{ 
    KeyContainerName = "PublicKey", 
    Flags = CspProviderFlags.UseMachineKeyStore 
    //Flags = CspProviderFlags.UseDefaultKeyContainer 
} 
    ) 
{ 
    PersistKeyInCsp = true 
}; 


//Export the key. 
publicRsa.ImportParameters(publicPrivateRsa.ExportParameters(false)); 


Console.WriteLine(publicRsa.ToXmlString(false)); 
Console.WriteLine(publicPrivateRsa.ToXmlString(false)); 

//Dispose those two CSPs. 
using (publicRsa) 
{ 
    publicRsa.Clear(); 
} 
using (publicPrivateRsa) 
{ 
    publicRsa.Clear(); 
} 

publicPrivateRsa = new RSACryptoServiceProvider(new CspParameters() 
{ 
    KeyContainerName = "PublicPrivateKey", 
    Flags = CspProviderFlags.UseMachineKeyStore 
    //Flags = CspProviderFlags.UseDefaultKeyContainer 
} 
    ); 


publicRsa = new RSACryptoServiceProvider(new CspParameters() 
{ 
    KeyContainerName = "PublicKey", 
    Flags = CspProviderFlags.UseMachineKeyStore 
    //Flags = CspProviderFlags.UseDefaultKeyContainer 
} 
    ); 

Console.WriteLine(publicRsa.ToXmlString(false)); 
Console.WriteLine(publicPrivateRsa.ToXmlString(false)); 


using (publicRsa) 
{ 
    publicRsa.Clear(); 
} 
using (publicPrivateRsa) 
{ 
    publicRsa.Clear(); 
} 
+1

이 질문에 대한 토론은 MSDN (http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/e3902420-3a82-42cf-a4a3-de230ebcea56)에서 확인할 수 있습니다. –

답변

4

이 키 컨테이너가 (: a disccusion on MSDN에 의해 확인 .NET Framework 개발자 가이드에서, 이것은 암시한다 "스토어 비대칭 키 컨테이너의 키 방법")이 목적을위한 것이 아닙니다 것으로 보인다.

키를 XML 파일에 저장하는 것과 같은 다른 메커니즘을 사용하여이 목표를 달성해야합니다.

-1

이 링크는 도움이 될 수 있습니다. http://msdn.microsoft.com/en-IN/library/tswxhw92(v=vs.80).aspx

var cp = new CspParameters(); 
cp.KeyContainerName = ContainerName; 

// Create a new instance of RSACryptoServiceProvider that accesses 
// the key container. 
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cp); 

// Delete the key entry in the container. 
rsa.PersistKeyInCsp = false; 

// Call Clear to release resources and delete the key from the container. 
rsa.Clear(); 

이것은 키 삭제에 관한 것입니다.

관련 문제