在我的应用程序中,我需要读取随应用程序一起分发的加密文件。我还需要使用密码连接到下载服务。我的难题是存储这些资源的密码?在其他语言中,例如C ++,我只是将它们存储在代码中。但是,由于有些工具可以反汇编C#,例如JetBrains DotPeek,这是不安全的。
以下是我到目前为止所考虑的解决方案,但我认为其中任何一个都不安全:
这个典型问题的正常解决方案是什么?
答案 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的链接,目前处于有效状态。