공개/개인 키 쌍의 공개 키만 저장할 때 컴퓨터 수준 RSA 키 컨테이너를 사용하는 데 문제가 있습니다.기계 수준 RSA 키 컨테이너에 공개 키를 저장하는 방법
다음 코드는 공개/개인 쌍을 만들고 해당 쌍에서 공개 키를 추출합니다. 쌍과 공개 키는 별도의 키 컨테이너에 저장됩니다. 그런 다음 해당 키 컨테이너에서 키를 가져 오면 컨테이너로 들어오는 키와 동일해야합니다. CspProviderFlags.UseDefaultKeyContainer
가 (즉, 키가 다시 밖으로 PublicKey의 용기로부터 판독 동일) CspParameters.Flags
지정된 있지만 CspProviderFlags.UseMachineKeyStore
가 CspParameters.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();
}
이 질문에 대한 토론은 MSDN (http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/e3902420-3a82-42cf-a4a3-de230ebcea56)에서 확인할 수 있습니다. –