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

时间:2010-02-04 22:04:02

标签: winforms security encryption app-config

我正在创建一个常规的Windows应用程序,该应用程序将分发给我部门的多个用户。我需要在App.config文件中包含一些连接密码,我显然不希望最终用户只需启动记事本并查看密码。

有几篇文章指出如何加密/解密配置部分,但似乎您必须与可部署的解决方案共享/发送一些密钥。

是否有一种更简单的方法,只是加密一些设置,使它们不是用户可读的,但在重新分发程序时不需要额外的步骤或文件?非常好的是访问配置设置在.NET代码中仍然是透明的。我总是可以创建一个自定义方法来加密/加密字符串,并在我的自定义代码中解密它,但我想知道是否有更简单的东西。

非常感谢任何有关如何执行此操作的文章的答案或链接。感谢

3 个答案:

答案 0 :(得分:8)

如果您尝试在App.Config / Web.Config中加密连接字符串,可以使用Configuration类来实现:

Configuration config = ConfigurationManager.   OpenExeConfiguration(ConfigurationUserLevel.None);
ConfigurationSection section =    config.GetSection("connectionStrings");
if (section != null)
{
    if (!section.IsReadOnly())
    {
        section.SectionInformation.ProtectSection             ("RsaProtectedConfigurationProvider");
        section.SectionInformation.ForceSave = true;
        config.Save(ConfigurationSaveMode.Full);
    }
}

有两种方法: RsaProtectedConfigurationProvider DPAPIProtectedConfigurationProvider

看到这个 - > http://www.codeproject.com/KB/cs/Configuration_File.aspxhttp://msdn.microsoft.com/en-us/library/89211k9b(VS.80).aspx

答案 1 :(得分:1)

简而言之,密码学并不是一个神奇的魔杖可以神奇地修复一个不安全的程序。

攻击者将在应用程序运行时尝试使用调试器从内存中获取密码。密码也将存在于二进制文件中,并且可以很容易地获得这些密码。可以绕过任何加密的使用,因为密码在使用时必须是纯文本。无论何时使用内存,都可以使用调试器进行观察。

答案在于反调试:http://www.codeproject.com/KB/security/Intro_To_Win_Anti_Debug.aspx

更高级的Windows反调试:

http://www.veracode.com/blog/2008/12/anti-debugging-series-part-i/

http://www.veracode.com/blog/2008/12/anti-debugging-series-part-ii/

http://www.veracode.com/blog/2009/01/anti-debugging-series-part-iii/

http://www.veracode.com/blog/2009/02/anti-debugging-series-part-iv/

答案 2 :(得分:0)

无论哪种方式,应用程序配置文件的加密和解密都没有意义,因为Reflector可以检查.EXE!

当然,您可以对代码进行模糊处理,但这会使调试成为生产环境中的噩梦,其中一个奇怪的未知/未发现的错误悄悄进入,因为您无法分辨出什么/在哪里/为什么/如何监视一个奇怪的错误这只会在发布时显示,因为堆栈跟踪和错误消息也会被混淆......

这是需要牢记的事情和潜在的陷阱......用户可能不是技术娴熟,但确信他们理论上可以在不知情的情况下要求朋友/亲戚/伙伴进行破解/破解。这个答案并不意味着让你失望,希望你不要被我的回答弄得冒犯......

希望这有帮助, 最好的祝福, 汤姆。