2014-02-25 59 views
1

网站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

我相信我是正确的,你说你需要在安装应用程序时运行它,因为所使用的加密是特定于计算机的。在PC上加密会导致一个配置文件无法在另一台PC上读取。 –

+0

听起来像它可能会打破等方法 - 我会回去看看是否有一个更简单的方法。我无法冒密码开放的风险。谢谢您的帮助。 – user1438082

回答

1

请按照步骤在this page。的作者你引用的代码片段也提到了这个页面,但是他错了,它不适用于app.config文件。 do是将yourapp.exe.config文件重命名为web.config,对所需的部分进行加密并将其重命名为yourapp.exe.config。

现在你的情况。我引用的页面还指出以下内容:

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

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

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

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

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