Csharp/C#教程:如何将公钥存储在机器级RSA密钥容器中分享


如何将公钥存储在机器级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

(0)
上一篇 2022年1月13日
下一篇 2022年1月13日

精彩推荐