加密以保护文件免受更改

时间:2009-07-04 15:16:53

标签: c# encryption reverse-engineering

我最近一直在阅读有关加密的内容,并且有兴趣保护许可文件不被篡改。现在这可能不是最好的方法,在这种情况下,我愿意接受建议。但我想保护它的一种方法就是简单加密它。

但是,如果我使用加密,我需要使用对称密钥,但这引发了一个问题。如果我在源代码中存储密钥,使用反射器等工具,它真的值得吗?获得初始化向量,盐,密钥等因此破坏加密似乎是一项相当简单的任务。有没有办法保护源中的密钥?或者这是完全错误的做法?

4 个答案:

答案 0 :(得分:8)

如果要防止篡改,则需要签名/散列,而不是加密。类似的理论 - 但这意味着您可以使用应用程序中的公钥验证该文件,而无需您保留在服务器上的私钥(并用于颁发许可证)。

搜索加密哈希/签名。

答案 1 :(得分:1)

系统客户端的任何内容都可能受到损害。

如果您加密文件,您还必须以某种方式将解密密钥放在您的程序中。任何拥有十六进制编辑器的人都可以单步执行代码来查找此密钥,然后解密许可文件并为系统创建密钥。

互联网激活将是一个很好的方式,但我会看到你是否可以找到第三方为你做这件事,因为他们之前会在这些道路上。

那说通过一些AES 256加密运行你的许可证文件不会有害:)。

答案 2 :(得分:1)

如果你在谈论MS / .NET环境,我推荐你DPAPI。 它是一个用于存储受密码保护的数据的API。然后你可以问我“但我遇到了同样的问题”,答案是否定的,因为在这种情况下你使用用户密码来保护你的数据。因此,要访问数据,您需要做的就是在特定凭据下运行您的应用程序。在MS环境中,它是最好的解决方案。

来自文档:

DPAPI专注于为用户提供数据保护。由于它需要密码来提供保护,因此逻辑步骤是让DPAPI以某种方式使用用户的登录密码。 DPAPI实际上使用用户的登录凭据。在用户使用密码登录的典型系统中,登录凭证只是用户密码的哈希值。然而,在用户使用智能卡登录的系统中,凭证将是不同的。为了简单起见,我们将使用术语用户密码,登录密码或密码来引用此凭证。

答案 3 :(得分:1)

您正在尝试的是DRM;在当前的PC硬件上没有100%的方法可以做到这一点。您可以采取许多措施来混淆程序的某些部分。这是您想要混淆多少以及您想让付费客户经历多少障碍之间的权衡。