C++ 在C+中加密存档的方法+;
我正在编写一个游戏,在一些xml文档以及资源文件中包含大量信息(配置、一些内容等)。这将使我自己和其他人更容易编辑程序而不必编辑实际的C++文件,而不必重新编译。 但是,随着程序开始增长,与程序位于同一目录中的文件也在增加。所以我想把它们放在一个文件归档中(因为它们大部分是文本,压缩效果很好) 我的问题是:压缩所有文件和:C++ 在C+中加密存档的方法+;,c++,compression,encryption,password-protection,C++,Compression,Encryption,Password Protection,我正在编写一个游戏,在一些xml文档以及资源文件中包含大量信息(配置、一些内容等)。这将使我自己和其他人更容易编辑程序而不必编辑实际的C++文件,而不必重新编译。 但是,随着程序开始增长,与程序位于同一目录中的文件也在增加。所以我想把它们放在一个文件归档中(因为它们大部分是文本,压缩效果很好) 我的问题是:压缩所有文件和: 为其设置密码(如密码保护的ZIP),然后在程序需要时提供密码 使用Crypto++或类似工具加密存档 稍微修改文件头作为“临时”加密,并在加载文件时修复文件头 我认为数字1和
还请注意,我不希望在程序使用归档文件时将归档文件中的文件“提取”到文件夹中。它应该只在系统内存中。 如果我必须在三个选项中选择,我会选择密码+ +,因为它与C++ iOnSt流非常适合。 但是:你是
- 将数据序列化为XML
- 压缩它
- 加密
但我支持丹尼尔刚才在我的屏幕上显示的答案。为什么?加密/压缩不会给您带来任何好处,除非用户提供某种形式的令牌(密码、智能卡等),而这些令牌并不存在于您编译的二进制文件或相关文件中。同样,如果您没有使用大量的磁盘空间,为什么要压缩?我认为您误解了加密带来的可能性 只要程序在不受信任的主机上执行,就不可能保证任何事情 最多,您可以使代码逆向工程变得困难(加密、代码混淆)或极其困难(自修改代码、调试/钩子检测),但您无法防止代码被破解。有了互联网,只要一个人破解了,所有人都可以使用 确实,防止个人篡改配置也是如此。无论采用何种方法(CRC、哈希-->顺便说一句,加密不是为了防止篡改),只要有足够的时间和手段(以及动机),仍然可以对其进行反向工程 保证配置不受干扰的唯一方法是将其存储在您控制的某个位置(服务器),对其进行签名(非对称),并让程序检查签名。但即使这样,它也不会阻止有人提供一个补丁,让您的程序使用用户提供的(未签名的)配置文件运行 你知道最糟糕的是什么吗?人们可能会更喜欢破解版,因为它摆脱了所有“安全”措施的负担,运行速度会更快 注意:是的,这是非法的,但让我们务实一点 注意:关于动机,你越聪明地保护程序,它对黑客就越有吸引力-->这就像是一个脑筋急转弯 那么,您如何提供安全的服务呢
- 你需要信任执行程序的人
- 您需要信任存储配置的人员
在您的情况下,我只需确保检测到对配置的轻微篡改(将其视为恶意,并确保在运行任何东西之前验证数据)。毕竟,文件损坏的可能性是一样的,如果一个损坏的配置文件意味着一台损坏的客户端机器,你为什么要加密这些东西呢?它需要加密,因为我不想让任何人编辑它或反向工程它。如果数据和可执行代码在用户的机器上,那么你的加密不会阻止一个坚定的黑客。哎呀,很多游戏都使用自己的虚拟文件系统,并且通常仅适用于只读文件。为了保护保存的游戏,可以使用CRC。我考虑过数据库,但由于有许多不同类型的文件(不仅仅是xml配置),我认为将.png存储到数据库中是没有意义的。此外,如果我需要编辑多个或单个文件,我可以:解压缩文件,编辑文件,然后重新打包。我认为数据库会更复杂一点。我以前从未使用过SQLite,所以如果你不同意,请男人们