加密App.Config部分并部署到多台计算机

时间:2017-10-04 22:45:01

标签: c# wpf encryption rsa app-config

我已经做了很多阅读,并试图加密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);
     }

和Decrypt:

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_regiis来创建和导出密钥容器(link)和(link)的文章中的步骤,但也许我做错了。我的猜测是因为我没有使用aspnet_regi来加密文件或解密文件我被卡住了。有没有办法在不使用aspnet_regiis工具和命令行的情况下执行此操作?

很多信息都是针对web.config vs app.config的。同样,这适用于使用MVVM的C#/ WPF应用程序。

我也在考虑自定义加密(自定义数据提供程序),但我见过的所有示例都是针对web.config(link)。

2 个答案:

答案 0 :(得分:0)

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

https://magenic.com/thinking/encrypting-configuration-sections-in-net

答案 1 :(得分:0)

对于winform RsaProtectedConfigurationProvider键可能需要系统ip或硬盘号等详细信息来执行自定义密钥,这对于每个系统都是不同的,因此在构建之前加密app.config将不起作用。因此尝试运行代码以在exe的后置事件中加密