我想在我的应用程序中为我的内容(资源)文件提供一个简单的保护层。例如,我的应用程序中使用了各种声音和图像文件。我想,我可以将它们包装在 SFX 存档中(可能与 WinRAR 一起打包),然后在我的应用程序中,使用一些参数启动 SFX exe,例如 -silent。但这可能不是最好的方法,所以如果你能给我一些建议,那就太好了。
附言我知道这听起来并不牢不可破(反正有一个),但出于某些原因这是必需的。
附言在 SFX(或其他一些包)完成提取后,我可以使用一些帮助来隐藏文件。
谢谢。
最佳答案
不要使用 SFX 存档。
很大程度上取决于您如何使用您的资源。如果您有很多需要文件名的库代码,那么这些文件必须在硬盘驱动器上保留一段时间。 如果可以,您想了解您的声音和媒体库是否可以传递指针 - 然后您自己加载文件,解密它们,并将指向解密缓冲区的指针传递给媒体 api。
至于实际加密。要么使用存档文件格式,例如 zlib .这使您能够将所有数据文件存储在一个加密的存档中,并将它们扩展到内存中。
或者滚动您自己的每个文件加密。在家滚动的 XOR 加密的优点是非常快。
几乎所有的文件加密都归结为:
- 从“ key ”开始。一个短字符串。
- 使用 key 初始化随机数生成器。
- 将 rng 中的字节与要加密的数据进行异或以对其进行加密。
- 稍后,解密数据:
- 从同一个key开始,初始化rng
- 这将生成相同的字节流,
- 将它们与加密数据进行异或以对其进行解密。
问题是(显然) key 需要存在于客户端中,这样任何坚定的黑客都可以得到它。所以在这里太花哨是没有意义的。只需生成 256 字节的“随机”数据,并在将文件加载到内存中或将它们写入临时文件夹时使用它来加密和解密文件。
如果你需要写出 ttemp 文件,你可以使用 FILE_FLAG_DELETE_ON_CLOSE让临时文件夹安全地自行清理,而不会将未加密的资源保留在磁盘上。
关于c++ - 保护内容文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2852557/