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

8
我正在创建一个常规的Windows应用程序,将分发给我们部门的多个用户。我需要在App.config文件中包含一些连接密码,但显然我不希望最终用户只需启动记事本并查看密码。
有几篇文章指出如何加密/解密配置部分,但似乎你必须与可部署解决方案共享/传递一些密钥。
是否有更简单的方法,只需对某些设置进行加密,使其对用户不可读,但在重新分发程序时不需要额外的步骤或文件?访问配置设置仍然透明地在.NET代码内部。我总是可以创建一个自定义方法来加盐/加密字符串,并在我的自定义代码中解密它,但我想知道是否有更简单的方法。
非常感谢任何回答或链接到如何做到这一点的文章。谢谢
3个回答

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);
    }
}

有两种方法: RsaProtectedConfigurationProviderDPAPIProtectedConfigurationProvider
请参见此链接 --> http://www.codeproject.com/KB/cs/Configuration_File.aspxhttp://msdn.microsoft.com/en-us/library/89211k9b(VS.80).aspx

Bhaskar,你试过这个吗?实际上加密部分,将受保护的app.config文件重新分发到另一个开发人员或最终用户机器上,并查看透明解密是否自动工作? - GR7
是的,我已经加密了配置文件并在生产环境中重新分发了它。 - Bhaskar
2
这样的解决方案(通过“安全性”来掩盖)会让你在一个有能力的技术公司中被解雇。如果你的代码可以检索明文,那么你认为攻击者不能使用相同的代码来...检索明文吗?唯一真正的解决方案涉及对服务器端施加安全约束。 - MickLH

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
您还可以使用SecureString来确保密码在任何时候都不会以明文形式出现在内存中。 - Ryan O'Neill
2
@Ryan 理论上很好,但实际上没有一个 SqlConnection 接受 SecureString,而且字符串也必须在某个时候从配置文件中读取并传递到 SecureString 中进行解密。 - CodeCaster

0

无论如何,应用程序配置文件的加密和解密都是毫无意义的,因为Reflector可以检查.EXE!

当然,您可以混淆代码,但在生产环境中,如果出现奇怪的未知/未发现的错误,调试将成为一场噩梦,因为您将无法确定何时/何地/为什么/如何监视只会在发布中显示的奇怪错误,堆栈跟踪和错误消息也将被混淆...

这是需要注意的事情和一个潜在的陷阱...用户可能不精通技术,但他们可以理论上要求朋友/亲戚/伴侣在您不知情的情况下进行黑客攻击/破解。这个答案并不是要打击您的积极性,希望您不会对我的回答感到冒犯...

希望这有所帮助, 最好的问候, 汤姆。


谢谢Tom,但我并不在意它是否真正加密,使用密码也可以。只要不能通过打开app.config文件并查看文本编辑器来查看密码,那就没问题了。 - GR7

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接