在C#中访问安全资源

时间:2017-11-02 08:47:52

标签: c# winforms security encryption disassembly

在我的应用程序中,我需要读取随应用程序一起分发的加密文件。我还需要使用密码连接到下载服务。我的难题是存储这些资源的密码?在其他语言中,例如C ++,我只是将它们存储在代码中。但是,由于有些工具可以反汇编C#,例如JetBrains DotPeek,这是不安全的。

以下是我到目前为止所考虑的解决方案,但我认为其中任何一个都不安全:

  1. 将密码存储在代码中:不好,因为C#可以被反汇编。
  2. 将密码存储在加密的外部资源中:不好,因为那时您需要存储密码!
  3. 首次使用时询问用户密码(通过其他方式告知用户):我认为不好,因为您是否还需要将其存储起来供以后使用?
  4. 将它们存储在C ++ DLL中:不好,因为什么阻止其他人在该dll中调用该函数?
  5. 隐藏和加密代码中的密码:例如,不要将其称为密码并使用多个级别对其进行加密。这将使那些只是文本搜索代码的人很难,但不会阻止有人准备调试程序以了解如何访问资源。不好。
  6. 模糊代码库以防止反汇编:可能这可能有用。它安全吗?有没有人这样做?
  7. 这个典型问题的正常解决方案是什么?

2 个答案:

答案 0 :(得分:1)

注意:如果您希望100%脱机完成身份验证,则没有真正安全的方式,因为有权访问该计算机的人可以访问所有内容。

首先,cpp可以按照this SO answer进行反编译。它真是太丑了。

为什么不使用存储散列密码的数据库呢?当用户想要读取文件或从服务下载时,您要求他输入密码,然后对其进行散列并将其与存储在数据库中的散列版本进行匹配。匹配当然可以通过安全协议完成。

这是关于ASP.NET身份验证的tutorial。您可以阅读它只是为了了解它们存储密码的方式并与之匹配。

请记住,混淆/多级加密不会阻止某人真正决定。

你的帖子里根本没有提到我的答案。你不喜欢这种方法还是没有想到它?

编辑:关于文件,由于不允许用户对其进行解密,因此您可以在数据库中存储其他“密钥”。当用户使用其密码进行身份验证时,您将从数据库中检索密钥并解密该文件。这样用户永远不会看到文件的密钥。

根据VytautasPlečkaitis的建议:您可以使用应用程序的has作为身份验证令牌从数据库中检索文件的密码。从用户友好的角度来看,这个想法是好的,因为它允许用户不必提供任何密码,但这意味着数据库的“密钥”对于您的应用程序的每个实例都是相同的(破解它一次,你破解他们所有)。此外,这意味着要获得应用程序的密钥所有你需要做的就是得到执行exe的哈希...我是一个安全专家(甚至不接近那个)所以我不知道这是多么安全但我不确定这是最好的主意。

对我来说,密码/哈希/数据库模式是最好的,特别是因为它多年来一直被使用。这是用于.NET Core身份验证的内置方法

答案 1 :(得分:0)

快速搜索并找到了这个可能是您的选项的Encrypting app.config File,只需将这些凭据存储在app.config中。你在这里做的是加密配置文件的各个部分。

  

你不能加密整个 - 它是一个   配置节组,其中包含配置节。

     

aspnet_regiis只会加密配置部分 - 所以你   需要有选择地加密你需要的那些部分,如下所示:

cd C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
aspnet_regiis.exe -pef "system.serviceModel/bindings" .
aspnet_regiis.exe -pef "system.serviceModel/services" .
etc.
  

有了这个,您可以轻松加密您需要的东西 - 也不是   重要的是,可以保留明文。

     

警告语:因为它的aspnet_regiis,它预计会处理   使用web.config文件 - 将app.config复制到某个位置并调用   它是web.config,加密你的部分,并复制加密的部分   部分回到你自己的app.config。

     

或者编写自己的配置部分加密/解密器 - 它真的   只需几行代码!或者用我的 - 我写了一个小的   ConfigSectionCrypt实用程序,从我的OneDrive中取出它 - 已满   source(C# - .NET 3.5 - Visual Studio 2008)。它允许您加密   并解密任何配置文件中的部分 - 只需指定文件名   在命令行上。

以下是指向OneDrive https://1drv.ms/u/s!AtQ29cmdYW3QgnnBpcHRRCc4_mop的链接,目前处于有效状态。