7

在我的 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.

我是第一次这样做,所以不知道如何解决这个问题,陷入了困境。

4

2 回答 2

9

使用此命令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Ʀ 回答

加密应用程序配置文件时,RsaProtectedConfigurationProvider 有时会失败

ASP.NET 加密 - aspnet_regiis - 农场

在 .NET 4.0 中加密和解密 Web.config 部分

于 2014-03-17T09:15:17.667 回答
8

app.config 文件将使用本地计算机上的证书进行加密。此证书不会出现在另一台机器上。因此,您将无法解密 app.config 文件。

为此,您需要在您的机器上导出加密密钥,然后在另一台机器上导入它。以下文章演示了如何执行此操作:演练:创建和导出 RSA 密钥容器

于 2013-04-20T23:50:35.207 回答