【问题标题】:Is there a way to encrypt the configuration file of a Windows Forms application?有没有办法加密 Windows 窗体应用程序的配置文件?
【发布时间】:2013-02-05 05:34:28
【问题描述】:

有没有办法加密 Windows 窗体应用程序的配置文件?

我在 google 上只能找到依赖于“aspnet_regiis.exe”的东西,但我想为桌面应用程序执行此操作?

例如http://msdn.microsoft.com/en-us/library/ms998283.aspx

【问题讨论】:

  • 您希望保护您车内的物品。你把钥匙锁在一个坚固的盒子里,然后把盒子和它的钥匙藏在车底下。好主意?你的问题不是加密可以解决的问题,所以不要尝试。 如果您不信任用户,那么您需要强化服务器。攻击者不会弄乱您的客户端应用程序;他们将编写自己的客户端。
  • @Eric:说得很好。但是,他要求攻击者无法通过加密密钥来编写自己的客户端。正如我在第二个回答中所说,这可能会变得困难,但并非不可能。正如你所指出的,一旦他们有了连接字符串,他就无能为力了。
  • 也就是说,最好在配置文件中加密密码以保护用户的密码免受攻击者对该用户的攻击。加密缓解的漏洞不是“恶意用户攻击我的数据库”,而是“恶意第三方未经授权访问了我的用户包含其密码的配置文件”。
  • @Eric#2:这也是非常正确的;这就是我在第一个答案的后半部分提到的内容。

标签: c# .net encryption configuration-files


【解决方案1】:

你想完成什么?

请记住,程序本身需要解密文件,并且在您的情况下,EXE 文件将位于最终用户的计算机上。
因此,任何可以访问配置文件的人几乎肯定也会拥有 EXE,并且没有办法阻止他们读取它。

如果您要存储最终用户的密码并希望防止其他人读取它,您可以在文件路径上调用File.Encrypt。请注意,这在 XP Home 中不起作用。

您还可以使用 System.Security.dll 中的ProtectedData 类来加密一个字节数组,这样只有登录的用户才能解密它,然后将该字节数组存储在配置文件中。 (这将适用于 XP 家庭,AFAIK)

【讨论】:

  • 我正在尝试生成一个应用程序,该应用程序需要访问数据库以提取我不希望应用程序用户访问且我不希望他们看到的信息到数据库的连接字符串。这也是我不能使用集成安全性的原因...
  • 你运气不好;那是不可能的。请记住,用户可以使用 Reflector 和调试器执行应用程序可以执行的任何操作。
  • 或者,另一种说法是应用程序只能做用户可以做的事情; 应用程序代表用户行事。如果应用程序可以做 X,那么显然用户必须能够做 X,因为应用程序只能做用户已经可以做的事情。如果应用程序可以解密配置文件并连接到数据库,那么用户也可以。
  • @Eric:这句话通常反着使用,当人们希望 Windows 只允许用户完成某些事情,而不是任何应用程序时。
【解决方案2】:
【解决方案3】:

回应您的评论:

无法阻止已确定的用户。如果用户足够努力,那么您没有可以阻止他做他机器上的应用程序可以做的事情。你可以让它变得非常困难,但并非不可能。

您究竟担心用户会做什么?

如果你只希望他能看到一些数据,你可以使用数据库权限或存储过程,或者用web服务替换数据库。
如果你不希望他能够复制数据,那么没有 100% 的解决方案。

您可以对程序集进行混淆,但没有一个混淆器是完全完美的。
您可以添加像if (Debugger.IsAttached) Environment.FailFast() 这样的行,但用户可以使用Reflexil 删除它们。
您可以将程序集文件的哈希用作(部分)加密密钥,但用户可以使用 Reflexil 将其替换为硬编码的字节数组。
如果您将数据库替换为 Web 服务,您可以修改 Web 服务以检测可疑请求,但用户可以在请求之间等待和/或使用不同的机器。
您可以返回图像而不是数据,但用户可以使用 OCR。

简而言之,你可以让它变得非常困难和耗时,但你不能让它变得不可能。

【讨论】:

    【解决方案4】:

    我根据您的需要应用了一个可行的解决方案。这是它的链接。

    http://www.ardabasoglu.com/1/post/2010/12/encrypting-the-windows-forms-application-settings.html

    【讨论】:

      猜你喜欢
      • 2019-09-27
      • 1970-01-01
      • 2016-05-08
      • 2020-01-24
      • 1970-01-01
      • 2010-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多