在我的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.
我是第一次这样做,所以不知道如何解决这个问题,严重困扰它。
答案 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
更多参考资料:
答案 1 :(得分:7)
app.config文件将使用本地计算机上的证书加密。该证书不会出现在其他计算机上。因此,您将无法解密app.config文件。
要使其正常工作,您需要在计算机上导出加密密钥,然后将其导入到其他计算机上。以下文章演示了如何执行此操作:演练:Creating and Exporting an RSA Key Container