7

我知道一种保存程序数据的粗略方法,将其保存在文本文件中。问题是任何人都可以访问文本文件并对其进行操作。例如,我想保存和加载随着游戏进行而变化的游戏数据。有什么方法可以存储这些数据并使其只能在游戏程序中访问,以免被其他人操纵?

4

3 回答 3

8

这个想法是以这样一种方式格式化您的数据,以便人类无法阅读。这可以通过使用多种方法来完成。

  • 将数据保存为二进制。这使得文件难以被人类阅读,因此需要使用十六进制编辑器或类似程序。这也使得很难看到一个值在哪里结束,另一个值从哪里开始(在文本文件中,这由空格显示)。这样做的另一个优点是您的文件会小得多。
  • 数据加密。可以使用各种方法对数据进行加密。这是一个相当安全的选项,但是加密可能很慢,因此对于大量数据,这可能不是最佳选择,具体取决于需要保存/加载数据的速度。还有一个问题是将加密/解密密钥存储在某个地方(可能在文件本身中,或者作为程序中的常量)。
  • 混淆。这是一个广义的术语,指的是使事情难以阅读。例如,可以将两个字符串交错以试图使两者都不可读。混淆通常涉及插入大量垃圾数据,即程序不使用的信息,只会混淆潜在的黑客。
  • 有效性检查。如果有人确实修改了文件,但他们不知道自己在做什么,他们很可能会对程序产生一些明显的影响。通过这种方式,他们可以简单地修改文件以查看您的程序如何反应。解决此问题的一种方法是检查所有数据是否在逻辑范围内。数据也可以多次存储在文件中,以不同的方式进行混淆或加密。如果数据不同,您就知道该文件已被篡改。
于 2013-07-04T01:50:53.190 回答
6

您应该将数据存储在二进制文件中。但是人们仍然可以改变它(就像我经常改变我在暗黑破坏神2中角色的技能点或统计点:D)所以你应该考虑找到一种算法来计算哈希和并将其存储在你的数据中。

于 2013-07-04T01:39:38.747 回答
3

您可以将数据保存在二进制文件中。只需从 c++ 对象写入和读取位。

于 2013-07-04T01:34:48.700 回答