加密配置

时间:2014-02-25 22:20:27

标签: c# configuration

网站上的代码here(如下所示)会加密app.config。我按下按钮来加载我的配置。

什么时候我应该运行代码 - (例如在应用程序启动时,如果它尚未加密)? 在我的bin文件夹中,我有2个xml配置文件(Applicationname.exe.config和Applicationname.vshost.exe - 此代码仅加密其中的第一个 - 当我部署我的程序时如何确保我的客户不会意外得到未加密的文件,因为这将是一个主要问题?(或者Windows安装程序是否负责确保这一点?)

C#代码

Configuration config = ConfigurationManager.OpenExeConfiguration(
    ConfigurationUserLevel.None);

SectionInformation appSettingsSecInfo = config.GetSection(
   "appSettings").SectionInformation;
if (!appSettingsSecInfo.IsProtected)
{
    Console.WriteLine("The configuration file has NOT been protected!");

    // Encrypt this section by using security provider 
    // (RsaProtectedConfigurationProvider or DpapiProtectedConfigurationProvider).
    appSettingsSecInfo.ProtectSection("RsaProtectedConfigurationProvider");
    appSettingsSecInfo.ForceSave = true;

    config.Save(ConfigurationSaveMode.Full);
}

1 个答案:

答案 0 :(得分:1)

请按照this page的步骤操作。您引用的代码段的作者也提到了此页面。但他错误地认为它不适用于app.config文件。您所要做的就是将yourapp.exe.config文件重命名为web.config,加密所需的部分并重命名为yourapp.exe.config。

现在到您的方案。我引用的页面还说明了以下内容:

  

您可以轻松地将RSA密钥从服务器导出到服务器。这使得RSA加密对于加密Web场中多个服务器上使用的配置文件特别有效。

它有一个关于导出和导入RSA密钥的部分。

因此,您可以加密PC上的配置,导出用于加密的RSA密钥并将其放入安装程序中。然后,安装程序将RSA加密密钥导入到部署应用程序的PC上的计算机或用户存储中。

但是你应该意识到,当应用程序启动时,加密配置必须使用RSA加密密钥的私有部分(我们导入或源自PC)进行解密。因此,如果应用程序可以访问私钥,那么客户可能会访问(我假设客户可以通过您的应用程序访问PC)。您可以做的是使用用户的用户密钥容器,只有应用程序将运行RSA加密密钥,但如果客户具有管理员权限,您将无法禁止他解密配置。

标准解决方案非常多。但是,您始终可以将敏感数据放入自定义xml文件中,对其进行加密,并将加密密钥编译到您的应用程序中。然后应用程序必须实现一个逻辑来解密xml本身。客户必须对您的应用程序进行反编译才能获得RSA加密密钥。