我在使用機器級別的RSA密鑰容器時僅存儲公鑰/私鑰對的公鑰時出現問題。如何將公鑰存儲在機器級別的RSA密鑰容器中
以下代碼創建一個公共/私有對,並從該對中提取公鑰。該對和公鑰存儲在單獨的密鑰容器中。然後從這些密鑰容器中獲得密鑰,此時它們應該與進入容器的密鑰相同。當用於CspParameters.Flags
指定CspProviderFlags.UseDefaultKeyContainer
(即,密鑰讀取來自公鑰容器背出是相同的),但是當用於CspParameters.Flags
指定CspProviderFlags.UseMachineKeyStore
讀取公鑰背面的鍵是不同
代碼工作。
爲什麼行爲不同,我需要做什麼不同才能從機器級別的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) –