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

Winforms 加密将重新分发的App.config文件中的节和/或设置,winforms,security,encryption,app-config,Winforms,Security,Encryption,App Config,我正在创建一个常规的windows应用程序,它将分发给我所在部门的几个用户。我需要在App.config文件中包含一些连接密码,我显然不希望最终用户只是启动记事本查看密码 有几篇文章介绍了如何加密/解密配置部分,但似乎您必须与可部署解决方案共享/提供一些密钥 有没有一种更简单的方法,只需对某些设置进行加密,使其不为用户可读,但在重新分发程序时不需要额外的步骤或文件?另外一个好处是,在.NET代码中访问配置设置仍然是透明的。我总是可以创建一个自定义方法来对字符串进行加密,然后在自定义代码中对其进行

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

有几篇文章介绍了如何加密/解密配置部分,但似乎您必须与可部署解决方案共享/提供一些密钥

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


任何关于如何做到这一点的文章的答案或链接都将不胜感激。谢谢

无论哪种方式,应用程序配置文件的加密和解密都是毫无意义的,因为.EXE可以通过

当然,您可以混淆代码,但这将使调试成为生产环境中的一场噩梦,在生产环境中,一个奇怪的未知/未发现的错误悄然而入,因为您无法知道监视什么/在哪里/为什么/如何监视一个奇怪的错误,该错误只会在发布时显示,因为堆栈跟踪和错误消息也会被混淆

这是一个需要记住的问题,也是一个潜在的陷阱……用户可能不懂技术,但在理论上他们肯定可以,在你不知情的情况下,让朋友/亲戚/合作伙伴破解/破解它。这个答案并不是为了让你拖延,希望你不会对我的回答感到生气

希望这有帮助, 顺致敬意,
汤姆。

简言之,密码学并不是神奇地修复不安全程序的魔杖

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

答案在于反调试:

更高级的windows反调试:


如果您试图在App.Config/Web.Config中加密连接字符串,可以使用配置类进行加密:

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);
    }
}
有两种方法:rsapietectedconfigurationproviderdpapietectedconfigurationprovider


看到此-->和。

谢谢Tom,但我并不真正关心它是否真正加密,加密就可以了。只要用文本编辑器打开app.config就看不到密码,我很好。Bhaskar,你试过这个吗?实际上是加密分区,将受保护的app.config文件重新分发给另一个开发人员或最终用户计算机,并查看透明解密是否自动工作?是的,我已经加密了配置文件,并在我的prod环境中重新分发了它。这样的解决方案(“保密性”)会让你在一家有能力的科技公司被解雇。如果您的代码可以检索明文,是什么让您认为攻击者不能使用相同的代码。。。检索明文?唯一真正的解决方案是在服务器端施加安全约束。您还可以使用SecureString确保密码在任何时候都不会以明文形式出现在内存中。@Ryan理论上很好,但实际上没有SqlConnection接受SecureString,在从配置读取字符串和将其传递到SecureString之间的某个时间点,字符串也必须被取消加密。