C# 加密App.Config节并部署到多台计算机

C# 加密App.Config节并部署到多台计算机,c#,wpf,encryption,rsa,app-config,C#,Wpf,Encryption,Rsa,App Config,我已经读了很多书,正在尝试加密WPF App.Config文件中的一个部分。我使用的不是默认部分,而是自定义部分。我有一个应用程序,其中用户指定了一个.config文件,应用程序读取该文件以更新密钥 为了解密和加密我的文件部分,我使用以下代码: var configMap = new ExeConfigurationFileMap { ExeConfigFilename = this.FileName }; var config = ConfigurationManager.OpenMapped

我已经读了很多书,正在尝试加密WPF App.Config文件中的一个部分。我使用的不是默认部分,而是自定义部分。我有一个应用程序,其中用户指定了一个.config文件,应用程序读取该文件以更新密钥

为了解密和加密我的文件部分,我使用以下代码:

var configMap = new ExeConfigurationFileMap { ExeConfigFilename = this.FileName };
var config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);
var configSection = config.GetSection(Section);

if (!configSection.SectionInformation.IsProtected)
   if (!configSection.ElementInformation.IsLocked)
     {
          configSection.SectionInformation.ProtectSection("RsaProtectedConfigurationProvider");
          configSection.SectionInformation.ForceSave = true;
          config.Save(ConfigurationSaveMode.Full);
     }
以及解密:

var configMap = new ExeConfigurationFileMap { ExeConfigFilename = this.FileName };
var config = ConfigurationManager.OpenMappedExeConfiguration(configMap, ConfigurationUserLevel.None);
var configSection = config.GetSection(Section);

if (configSection.SectionInformation.IsProtected)
{
    configSection.SectionInformation.UnprotectSection();
    configSection.SectionInformation.ForceSave = true;
    config.Save(ConfigurationSaveMode.Full);
}
我面临的问题是,如果我有一个在机器a上加密的文件,并且我将该文件放在机器B上,我无法解密.config文件,因为加密是在机器a上完成的

我曾尝试按照几篇文章中建议使用aspnet_regis创建和导出密钥容器()和()的步骤进行操作,但可能我做错了什么。我的猜测是,因为我没有使用aspnet_regis来加密文件或解密文件,所以我被卡住了。有没有一种不用aspnet_regiis工具和命令行就可以做到这一点的方法

关于web.config和app.config的信息很多。同样,这适用于使用MVVM的C#/WPF应用程序


我还研究了自定义加密(CustomDataProvider),但我看到的所有示例都是针对web.config()

我自己在寻找答案。但是,在您的情况下,如果我没有弄错的话,您必须执行步骤2——导出RSA密钥


对于winform RsaProtectedConfigurationProvider,密钥可能需要系统ip或硬盘号等详细信息来执行自定义密钥,这对于每个系统都是不同的,因此在生成之前对app.config进行加密将不起作用。因此,请尝试在exe的postbuild事件中运行加密代码(此帖子似乎没有提供问题的答案。请编辑您的答案,或者将其作为问题的注释发布)。