无法使用提供程序'RsaProtectedConfigurationProvider'解密?

时间:2013-04-20 19:38:06

标签: c# visual-studio-2010 encryption setup-deployment

在我的Windows应用程序中,我正在尝试加密app.config文件的连接字符串部分,我的app.config文件的连接字符串部分是

<connectionStrings>
<add name="SQLiteDB" connectionString="Data Source=|DataDirectory|database.s3db;    
Version=3;password=mypassword;" providerName="System.Data.Sqlite"/>
</connectionStrings>

并在.cs文件中加密,如

Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);
ConfigurationSection section = config.GetSection("connectionStrings") as ConnectionStringsSection; // could be any section

if (!section.IsReadOnly())
{
 section.SectionInformation.ProtectSection("RsaProtectedConfigurationProvider");
 section.SectionInformation.ForceSave = true;
 config.Save(ConfigurationSaveMode.Full);
}

运行此代码后,我在另一个app.config中获取加密连接字符串,此app.config位于bin \ debug文件夹中,此.config文件的名称为nameofapplication.exe.config。

问题是当我设置此应用程序并在其他计算机上运行时,如果出现错误:

System.Configuration.ConfigurationErrorsException: Failed to decrypt using provider 'RsaProtectedConfigurationProvider'. Error message from the provider: The RSA key container could not be opened.

我是第一次这样做,所以不知道如何解决这个问题,严重困扰它。

2 个答案:

答案 0 :(得分:8)

使用此命令 aspnet_regiis -pa

以管理员身份打开cmd控制台 - 执行 -

C:\Windows\system32>aspnet_regiis -pa "NetFrameworkConfigurationKey" "myDomain\myUser"
Microsoft (R) ASP.NET RegIIS versión 4.0.30319.33440
Utilidad de administración que instala y desinstala ASP.NET en el equipo local.
Copyright (C) Microsoft Corporation. Todos los derechos reservados.
Agregando ACL para el acceso al contenedor de claves RSA...
Con éxito

更多参考资料:

Ɖiamond ǤeezeƦ answer

The RsaProtectedConfigurationProvider sometimes fails when encrypting an application configuration file

ASP.NET Encryption - aspnet_regiis - Farm

Encrypting and Decrypting Web.config Sections in .NET 4.0

答案 1 :(得分:7)

app.config文件将使用本地计算机上的证书加密。该证书不会出现在其他计算机上。因此,您将无法解密app.config文件。

要使其正常工作,您需要在计算机上导出加密密钥,然后将其导入到其他计算机上。以下文章演示了如何执行此操作:演练:Creating and Exporting an RSA Key Container