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

Posted

技术标签:

【中文标题】加密 App.Config 部分并部署到多台机器【英文标题】:Encrypting App.Config Section and deploying to multiple machines 【发布时间】:2018-03-16 11:06:12 【问题描述】:

我已经阅读了很多内容,并试图加密 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_regiis 创建和导出密钥容器 (link) 和 (link) 的几篇文章中的步骤进行操作,但也许我做错了什么。我的猜测是,因为我没有使用 aspnet_regiis 来加密文件或解密文件,所以我卡住了。有没有办法在不使用 aspnet_regiis 工具和命令行的情况下做到这一点?

有关 web.config 与 app.config 的很多信息。同样,这是针对使用 MVVM 的 C#/WPF 应用程序。

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

【讨论】:

(这篇文章似乎没有为问题提供quality answer。请编辑您的答案,或者将其作为对问题的评论发布)。

以上是关于加密 App.Config 部分并部署到多台机器的主要内容,如果未能解决你的问题,请参考以下文章

在 app.config 中部署通过 RSAProtectedConfigurationProvider 加密的连接字符串

Clickonce 应用部署,在 app.config 中隐藏密码

加密 app.config 中的连接字符串

加密将重新分发的 App.config 文件中的部分和/或设置

加密 App.Config 文件的 appsettings 部分中的单个密钥

加密 connectionStrings 部分 - app.config 的实用程序