网站上的代码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);
}
答案 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加密密钥。