C# 如何从代码中设置RSAProtectedConfigurationProvider的密钥大小

C# 如何从代码中设置RSAProtectedConfigurationProvider的密钥大小,c#,security,web-config,rsa,C#,Security,Web Config,Rsa,我的应用程序可以保护所选的配置文件。这是使用加载的指定部分的方法完成的。我正在使用标准提供者 代码非常简单-非常类似于 有没有办法设置提供程序应该使用的密钥大小?据我所知,RSA的默认值是1024。我需要将其设置为2048或更大 当我们使用asp_regiis.exe时,可以使用命令行选项-size执行类似操作。但我需要从代码开始。也许有任何方法可以配置rsaptectedconfigurationprovider或预创建密钥,并以某种方式将其注入默认密钥存储,以便下次使用SectionInfo

我的应用程序可以保护所选的配置文件。这是使用加载的指定部分的方法完成的。我正在使用标准提供者

代码非常简单-非常类似于

有没有办法设置提供程序应该使用的密钥大小?据我所知,RSA的默认值是1024。我需要将其设置为2048或更大

当我们使用asp_regiis.exe时,可以使用命令行选项-size执行类似操作。但我需要从代码开始。也许有任何方法可以配置
rsaptectedconfigurationprovider
或预创建密钥,并以某种方式将其注入默认密钥存储,以便下次使用
SectionInformation.ProtectSection
时能赶上它


感谢您的建议或示例。

rsaptectedconfigurationprovider
提供了两种不同的方法。一个调用可以用于在容器内创建密钥。如果您将密钥标记为可导出的,您可以稍后使用方法获取该密钥并将其存储到其他地方

如果已有密钥,则可以使用
ImportKey
方法。它将接受一个类似于
ExportKey
的XML blob

rsaptectedconfigurationprovider
如果未提供默认容器名,则使用默认容器名NetFrameworkConfigurationKey。因此,如果您预先创建密钥并将其添加到该容器中,那么提供者应该在您使用密钥时将其提取

// Same properties as .NET uses to load the key
CspParameters csp = new CspParameters();
csp.KeyContainerName = "NetFrameworkConfigurationKey"; 
csp.KeyNumber = 1;
csp.ProviderType = 1;

// Create the new key, and save it in the key store
rsa = new RSACryptoServiceProvider(2048, csp);
rsa.PersistKeyInCsp = true;
rsa.Clear();

我认为您应该创建自己的密钥容器,然后使用属性指向它。kirmir,这能解决您的问题吗?请回复评论。@owlstead,可能是的。我唯一不喜欢的是,在这种情况下,我必须在每个加密的配置文件中写入容器配置。此外,还需要配置对容器的访问权限。