在C++中加密存档的方法

Der*_*iel 7 c++ compression encryption password-protection

我正在编写一个游戏,它会在一些xml文档和资源文件中包含大量信息(配置,一些内容等).这将使我和其他人更容易编辑程序,而无需编辑实际的C++文件,也无需重新编译.

但是,随着程序开始增长,与程序在同一目录中的文件会增加.所以我想把它们放在一个文件存档中(因为它们主要是文本,因此压缩效果很好).

我的问题是:压缩所有文件会更容易吗:

  1. 设置密码(如受密码保护的ZIP),然后在程序需要时提供密码
  2. 使用Crypto ++或类似方法加密存档
  3. 稍微修改文件头作为"临时"加密,并在加载文件时修复文件的头文件

我认为数字1和2是相似的,但我找不到有关zlib是否可以处理受密码保护的档案的任何信息.

另请注意,我不希望在程序使用时将存档中的文件"提取"到文件夹中.它应该只在系统的内存中.

Mat*_* M. 3

我认为您误解了加密带来的可能性。

只要程序在不受信任的主机上执行,就不可能保证任何事情。

最多,您可以使某人对代码进行逆向工程变得困难(加密、代码混淆)或极其困难(自修改代码、调试/挂钩检测),但您无法阻止破解。有了互联网,一旦被一个人破解,所有人都可以使用它。

实际上,这同样适用于防止个人篡改配置。无论采用哪种方法(CRC、哈希 --> 顺便说一句,加密并不是为了防止篡改),只要有足够的时间和手段(和动机),仍然可以对其进行逆向工程。

保证配置不被篡改的唯一方法是将其存储在您控制的地方(服务器),对其进行签名(非对称)并让程序检查签名。但即便如此,它也不会阻止某人提供补丁,让您的程序使用用户提供的(未签名)配置文件运行......

你知道最糟糕的情况吗?人们可能会更喜欢破解版本,因为摆脱了所有这些“安全”措施的负担,它会运行得更快......

注意:是的,这是非法的,但让我们务实一点......

注意:关于动机,你对程序的保护越聪明,对黑客来说就越有吸引力 --> 这对他们来说就像是一个脑筋急转弯!

那么如何提供安全的服务呢?

  • 你需要信任执行该程序的人
  • 您需要信任存储配置的人

只有当您提供瘦客户端并在您信任的服务器上执行所有操作时,才能做到这一点……即使这样,您也很难确保没有人在您的服务器中找到您没有想到的门。

站在你的立场上,我只是确保检测到对配置的轻微篡改(将其视为恶意的,并确保在运行任何内容之前验证数据)。毕竟文件损坏的可能性是一样的,如果损坏的配置文件意味着客户端的机器被毁,那将付出惨重的代价:)