如何将公钥存储在机器级 RSA 密钥容器中
当仅存储公钥/私钥对的公钥时,我在使用机器级 RSA 密钥容器时遇到问题。
以下代码创建一个公钥/私钥对并从该对中提取公钥。该对和公钥存储在单独的密钥容器中。然后从这些密钥容器中获取密钥,此时它们应该与进入容器的密钥相同。
当为 CspParameters.Flags
指定 CspProviderFlags.UseDefaultKeyContainer
时,该代码有效(即从 PublicKey 容器读回的密钥是相同的),但是,当为 CspParameters.Flags
指定 CspProviderFlags.UseMachineKeyStore
时,从 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();
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
似乎关键容器并非用于此目的(这暗示了“如何:将不对称键存储在密钥容器中”,从.NET Framework Developer's指南中,并由MSDN 上的讨论)。
需要使用其他机制(例如将密钥存储在 XML 文件中)来实现此目标。
It seems that key containers are not intended for this purpose (this is implied by "How to: Store Asymmetric Keys in a Key Container" from the .NET Framework Developer's Guide, and confirmed by a disccusion on MSDN).
Other mechanisms, such as storing the key in an XML file, need to be used to achieve this goal.
此链接可能对您有帮助。 http://msdn.microsoft.com/en- IN/library/tswxhw92(v=vs.80).aspx
这就是关于密钥删除的内容。
This link may help you. http://msdn.microsoft.com/en-IN/library/tswxhw92(v=vs.80).aspx
This is what it says about key deletion.