我正在创建一个常规的Windows应用程序,该应用程序将分发给我部门的多个用户。我需要在App.config文件中包含一些连接密码,我显然不希望最终用户只需启动记事本并查看密码。
有几篇文章指出如何加密/解密配置部分,但似乎您必须与可部署的解决方案共享/发送一些密钥。
是否有一种更简单的方法,只是加密一些设置,使它们不是用户可读的,但在重新分发程序时不需要额外的步骤或文件?非常好的是访问配置设置在.NET代码中仍然是透明的。我总是可以创建一个自定义方法来加密/加密字符串,并在我的自定义代码中解密它,但我想知道是否有更简单的东西。
非常感谢任何有关如何执行此操作的文章的答案或链接。感谢
答案 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.aspx和http://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!
当然,您可以对代码进行模糊处理,但这会使调试成为生产环境中的噩梦,其中一个奇怪的未知/未发现的错误悄悄进入,因为您无法分辨出什么/在哪里/为什么/如何监视一个奇怪的错误这只会在发布时显示,因为堆栈跟踪和错误消息也会被混淆......
这是需要牢记的事情和潜在的陷阱......用户可能不是技术娴熟,但确信他们理论上可以在不知情的情况下要求朋友/亲戚/伙伴进行破解/破解。这个答案并不意味着让你失望,希望你不要被我的回答弄得冒犯......
希望这有帮助, 最好的祝福, 汤姆。