C# 加密以保护文件不受更改

C# 加密以保护文件不受更改,c#,encryption,reverse-engineering,C#,Encryption,Reverse Engineering,我最近读了一些关于加密的书,对保护许可证文件不被篡改很感兴趣。现在这可能不是最好的方法,在这种情况下,我愿意接受建议。但我想保护它的一种方法是简单地加密它 然而,如果我要使用加密,我需要使用对称密钥,但这提出了一个问题。如果我在源代码中存储一个密钥,并使用诸如reflector之类的工具,那么它真的值得吗?获取初始化向量、salt、密钥等并因此破坏加密似乎是一项相当简单的任务。有没有办法保护源代码中的密钥?或者这是完全错误的方法?系统客户端的任何内容都可能受到损害 如果你加密你的文件,你还必须在

我最近读了一些关于加密的书,对保护许可证文件不被篡改很感兴趣。现在这可能不是最好的方法,在这种情况下,我愿意接受建议。但我想保护它的一种方法是简单地加密它


然而,如果我要使用加密,我需要使用对称密钥,但这提出了一个问题。如果我在源代码中存储一个密钥,并使用诸如reflector之类的工具,那么它真的值得吗?获取初始化向量、salt、密钥等并因此破坏加密似乎是一项相当简单的任务。有没有办法保护源代码中的密钥?或者这是完全错误的方法?

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

如果你加密你的文件,你还必须在你的程序中放入解密密钥。任何拥有十六进制编辑器的人都可以通过您的代码找到该密钥,然后解密您的许可证文件,并为您的系统创建密钥

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


也就是说,通过一些AES 256加密来运行许可证文件不会有什么坏处:。

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

如果你加密你的文件,你还必须在你的程序中放入解密密钥。任何拥有十六进制编辑器的人都可以通过您的代码找到该密钥,然后解密您的许可证文件,并为您的系统创建密钥

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


也就是说,通过一些AES 256加密来运行许可证文件不会有什么坏处:。

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

从文件中:


DPAPI致力于为用户提供数据保护。由于需要密码来提供保护,因此DPAPI的逻辑步骤是以某种方式使用用户的登录密码。DPAPI实际上使用用户的登录凭据。在用户使用密码登录的典型系统中,登录凭据只是用户密码的散列。然而,在用户使用智能卡登录的系统中,凭证会有所不同。为了简单起见,我们将使用术语“用户密码”、“登录密码”或“仅密码”来指代此凭据。

如果您指的是MS/.NET环境,我建议您使用。 它是一个API,用于存储受密码保护的数据。然后你可以问我,但我也有同样的问题,答案是否定的,因为在这种情况下,你使用用户密码来保护你的数据。因此,要访问数据,您必须在特定凭据下运行应用程序。在MS环境中,它是最好的解决方案

从文件中:


DPAPI致力于为用户提供数据保护。由于需要密码来提供保护,因此DPAPI的逻辑步骤是以某种方式使用用户的登录密码。DPAPI实际上使用用户的登录凭据。在用户使用密码登录的典型系统中,登录凭据只是用户密码的散列。然而,在用户使用智能卡登录的系统中,凭证会有所不同。为了简单起见,我们将使用术语“用户密码”、“登录密码”或“仅密码”来引用此凭据。

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


搜索加密哈希/签名。

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


搜索加密哈希/签名。

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

你尝试的是数字版权管理;在当前的PC硬件上,没有100%的方法可以做到这一点。有许多措施
您可以使用这些代码来混淆程序的某些部分。这是一个权衡,在你想混淆多少和你想让你的付费客户通过多少障碍之间。

数字签名根据可信的公共证书进行验证。如果有人启动reflector从程序中取出密钥,他们可以同样轻松地交换受信任的公钥。谢谢Marc,我曾短暂地认为哈希可能是另一种方式。一些我不太了解的事情。我实际上认为这可能会遇到类似的问题,反思并找出文件是如何散列的,以便有人可以随意进行更改。如果它像加密一样工作,那么非对称方法可能正是我所需要的。我会调查一下的。感谢Marc提到的,基本上您希望使用GPG之类的公钥/私钥加密,并使用私钥签署许可证。该程序将使用相应的公钥验证签名,以确保签名后签名未被篡改。正如Clemahieu所述,理论上,有人可以发行自己的密钥对,替换程序使用的公钥,制作并签署自己的许可证,但这需要大量工作,并涉及篡改程序本身,假设密钥存储在可执行文件中。您可以计算公钥的MD5sum,并确保它也与硬编码值匹配,但任何具有调试器的人都将能够绕过许可证文件,无论您做什么。数字签名根据受信任的公共证书进行验证。如果有人启动reflector从程序中取出密钥,他们可以同样轻松地交换受信任的公钥。谢谢Marc,我曾短暂地认为哈希可能是另一种方式。一些我不太了解的事情。我实际上认为这可能会遇到类似的问题,反思并找出文件是如何散列的,以便有人可以随意进行更改。如果它像加密一样工作,那么非对称方法可能正是我所需要的。我会调查一下的。感谢Marc提到的,基本上您希望使用GPG之类的公钥/私钥加密,并使用私钥签署许可证。该程序将使用相应的公钥验证签名,以确保签名后签名未被篡改。正如Clemahieu所述,理论上,有人可以发行自己的密钥对,替换程序使用的公钥,制作并签署自己的许可证,但这需要大量工作,并涉及篡改程序本身,假设密钥存储在可执行文件中。您可以计算公钥的MD5sum,并确保它也与硬编码值匹配,但任何具有调试器的人都将能够绕过许可证文件,无论您做什么。我认为您需要澄清这个问题,并告诉我们谁对篡改文件感兴趣。例如,Marc的anwser假设有第三方篡改文件。大多数其他答案都假设客户自己对篡改文件感兴趣,例如为了规避限制。如果你想描述一个清晰的攻击模型,那么这将有助于确定正确的答案。我认为你需要澄清这个问题,并告诉我们谁对篡改文件感兴趣。例如,Marc的anwser假设有第三方篡改文件。大多数其他答案都假设客户自己对篡改文件感兴趣,例如为了规避限制。如果你想描述一个清晰的攻击模型,那么这将有助于确定正确的答案。感谢你的回答,我确实认为模糊处理可能会有所帮助,但是,即使在模糊处理到位的情况下,隔离程序可能也是相当容易的一部分。感谢你的回答,我确实认为模糊处理可能会有所帮助,然而,在程序中,即使存在混淆,也很容易将其隔离。谢谢,我认为可能是这样。谢谢,我认为可能是这样。