如何将公钥存储在机器级RSA密钥容器中
当仅存储公钥/私钥对的公钥时,我在使用机器级RSA密钥容器时遇到问题。
以下代码创建公共/私有对,并从该对中提取公钥。 该对和公钥存储在单独的密钥容器中。 然后从那些密钥容器获得密钥,此时它们应该与进入容器的密钥相同。
代码适用于为CspParameters.Flags
指定CspParameters.Flags
(即从PublicKey容器读回的密钥相同),但是当为CspParameters.Flags
指定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(); }
似乎密钥容器不是为此目的而设计的(这是“如何:在.NET Framework开发人员指南中存储密钥容器中的非对称密钥”所暗示的,并通过对MSDN的讨论得到证实)。
需要使用其他机制(例如将密钥存储在XML文件中)来实现此目标。
这个链接可以帮到你。 https://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();
这就是关于密钥删除的说法。
上述就是C#学习教程:如何将公钥存储在机器级RSA密钥容器中分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1031322.html