【问题标题】:How to encrypt app.config?如何加密 app.config?
【发布时间】:2011-05-18 19:47:10
【问题描述】:

在 wpf (c#) 中创建 app.config

<?xml version="1.0"?>
<configuration>
  <connectionStrings>
    <clear />
    <add name="Name"
     providerName="MySql.Data"
     connectionString="Server=.net;Uid=;Pwd=H;Database=;charset=utf8;Allow Zero Datetime=true;" />
  </connectionStrings>
</configuration>

使用的代码 C#:

    Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
    ConnectionStringsSection conStr = config.ConnectionStrings;
    if (!conStr.SectionInformation.IsProtected)
    {
        conStr.SectionInformation.ProtectSection("RSAProtectedConfigurationProvider");
        conStr.SectionInformation.ForceSave = true;
        config.Save();
    }
    else
    {
        foreach (ConnectionStringSettings ss in conStr.ConnectionStrings)
            Console.WriteLine(ss);
        Console.Read();
    }

config.Save(); - 导致异常:

{"使用提供者加密部分'connectionStrings'失败 'RsaProtectedConfigurationProvider'。来自的错误消息 提供者:对象已经存在。\r\n"}

【问题讨论】:

  • @ThiefMaster:这显然是错误的。
  • @ThiefMaster,我是从论坛上读到的……它是怎么做到的?
  • @Jason:加密配置文件的充分理由是什么?无论如何,应用程序都需要能够对其进行解密,以便从中提取加密密钥...
  • @ThiefMaster:加密配置文件很常见。它可以保护配置文件免受意外的媒体丢失和未经授权的帐户的读取。使用 DPAPI 保护配置部分。操作配置部分的 .Net 框架类具有加密和解密内容的显式方法这一事实应该是一个重要的警告信号,表明该操作非常非常合法。

标签: c# wpf security connection-string


【解决方案1】:

我在保存时遇到了同样的异常。通过以管理员身份运行应用程序,我能够解决这个问题。

我在我的项目中添加了一个 app.manifest 文件,并更改了执行级别,如下所示:requestedExecutionLevel level="requireAdministrator" uiAccess="false"

这样,我始终以管理员身份运行,并有权保存加密部分。

【讨论】:

    【解决方案2】:

    【讨论】:

    • 这很好,但我不明白。我需要工作示例 =(
    【解决方案3】:

    您可以考虑使用aspnet_regiis.exe 为您执行加密。参考这个 MSDN Link

    这样您无需编写代码即可执行加密。

    【讨论】:

    猜你喜欢
    • 2010-10-13
    • 2012-12-21
    • 2011-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-05
    • 2011-02-10
    • 1970-01-01
    相关资源
    最近更新 更多