用C ++加密档案的方法

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

但是,随着程序开始增长,与程序在同一目录中的文件数量增加。 所以我想把它们放在一个文件档案里面(因为它们大多是文本,压缩效果很好)。

我的问题是这样的:压缩所有文件和:

  • 设置密码(如密码保护的ZIP),然后在程序需要时提供密码
  • 使用Crypto ++或类似软件加密存档
  • 稍微修改文件标题为“临时”加密,并在加载文件时修复文件的标题
  • 我认为数字1和2是相似的,但我无法找到关于zlib是否可以处理受密码保护的档案的任何信息。

    另外请注意,我不希望档案内的文件在程序使用时被“提取”到文件夹中。 它应该只在系统的内存中。


    我想你误解了加密带来的可能性。

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

    对于某人来说,对于代码进行逆向工程,您最多可以使其变得困难(加密,代码混淆)或者非常困难(自修改代码,调试/钩子检测),但无法防止破解。 随着互联网的发展,一旦它被一个人破解,它就会面向所有人。

    真正如此,也是为了防止个人篡改配置。 无论哪种方法(CRC,哈希 - >通过加密并不意味着防止篡改),仍然有可能在给定足够的时间和手段(和动机)的情况下对其进行逆向工程。

    保证不受配置影响的唯一方法是将其存储在某个您控制的位置(服务器),签名(不对称)并让程序检查签名。 但即使如此,它也不会阻止某人提供补丁程序,让您的程序以用户提供的(无符号)配置文件运行。

    你知道最糟糕的吗? 人们可能会更喜欢破解版本,因为从所有那些“安全”措施的负担中解脱出来会更快......

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

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

    那么你如何提供安全服务?

  • 你需要相信执行程序的人
  • 您需要信任存储配置的人员
  • 只有当你提供一个瘦客户端,并在你信任的服务器上执行所有事情时,才能做到这一点......即使如此,你也无法确保没有人发现你的服务器上没有你想过的门。

    在你的鞋子里,我只需确保检测到轻微的篡改配置(将它视为敌对,并确保在运行之前验证数据)。 在所有文件损坏的可能性相同之后,如果一个损坏的配置文件意味着一个被破坏的客户端机器,就会付出代价:)


    如果我不得不选择你的三个选项,我会选择Crypto ++,因为它非常适合C ++ iostream。

    但你是

  • 将数据序列化为XML
  • 压缩它
  • 加密它
  • 全部在记忆中,然后再回来。 我真的会重新考虑这个选择。 为什么不使用例如。 SQLite将所有数据存储在基于文件的数据库中(SQLite不需要任何外部数据库进程)?

    可以通过各种扩展(SEE或SQLCipher)添加加密。 它安全,快速并且完全透明。

    你不会得到压缩,但是再次,通过使用SQLite而不是XML,这不会是一个问题(或者我认为)。


    设置密码(如密码保护的ZIP),然后在程序需要时提供密码

    首先,除非你要求用户输入密码,否则你不能这样做。 如果该加密密钥存储在代码中,请不要让确定的逆向工程师下注找到并解密存档。

    一个大的规则是:你不能在你的软件中存储加密密钥,因为如果你这样做,使用加密有什么意义? 我可以找到你的钥匙。

    现在,到其他点。 zlib不支持加密,正如他们指出的那样,PKZip无论如何都是相当破裂的。 我怀疑,如果你倾向于找到一个,你可能会发现一个压缩/压缩库能够处理加密。 (ZipArchive我相信处理邮编+ AES,但你需要支付)。

    但我第二次丹尼尔的回答只是显示在我的屏幕上。 为什么? 除非用户提供某种形式的令牌(密码,智能卡等),不存在于编译的二进制文件或相关文件中,否则加密/压缩不会带来任何好处。 同样,如果你没有占用大量的磁盘空间,为什么要压缩?

    链接地址: http://www.djcxy.com/p/50259.html

    上一篇: Methods for encrypting an archive in C++

    下一篇: symbolic link creation into RPM spec file