RSACryptoServiceProvider 的问题

Posted

技术标签:

【中文标题】RSACryptoServiceProvider 的问题【英文标题】:Problems with RSACryptoServiceProvider 【发布时间】:2011-02-13 10:47:42 【问题描述】:

我的机器上的 RSACryptoServiceProvider 有一些问题。如果创建一个新实例:

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();

我已经得到一个异常,在 CspKeyContainerInfo 属性下:

Exportable 'rsa.CspKeyContainerInfo.Exportable' 引发了类型为“System.Security.Cryptography.CryptographicException”的异常 bool System.Security.Cryptography.CryptographicException

base "密钥不存在。\r\n" System.SystemException System.Security.Cryptography.CryptographicException

如果我在另一台 PC 上尝试相同的代码,一切正常。我的 PC 上是否有一些设置可以检查以查看它们是否配置正确以及配置延迟了什么?关于可能是什么问题的任何线索?

谢谢

编辑: 似乎它只发生在框架 4.0 上。有什么线索吗?

【问题讨论】:

【参考方案1】:

我设法让它工作。

            CspParameters parms = new CspParameters();
            parms.Flags = CspProviderFlags.NoFlags;
            parms.KeyContainerName = Guid.NewGuid().ToString().ToUpperInvariant();
            parms.ProviderType = ((Environment.OSVersion.Version.Major > 5) || ((Environment.OSVersion.Version.Major == 5) && (Environment.OSVersion.Version.Minor >= 1))) ? 0x18 : 1;

            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(parms);

我不知道为什么,但就是这样。 如果有人知道这种行为的原因,欢迎发表评论。

谢谢

【讨论】:

将 KeyContainerName 设置为 NewGuid 对我有用。感谢分享!【参考方案2】:

您可以在 windows 注册表中获取提供程序类型: \local_machine\software\Microsoft\Cryptography\Defaults\Provider\

查找您想要的提供程序并检查类型值...

【讨论】:

以上是关于RSACryptoServiceProvider 的问题的主要内容,如果未能解决你的问题,请参考以下文章

RSACryptoServiceProvider 工作正常吗?

如何使用先前使用 RSACryptoServiceProvider 加密的 RSACng 解密数据

如何提取 RSACryptoServiceProvider 生成的素数?

C# - RSACryptoServiceProvider - 错误:错误数据

从公钥正确创建 RSACryptoServiceProvider

这个 C# RSACryptoServiceProvider 方法的红宝石等价物是啥