保存和加载数据C++

lam*_*bda 7 c++

我知道保存程序数据的粗略方法,将其保存在文本文件中.问题是任何人都可以访问文本文件并可以操作它.例如,我想保存并加载随游戏进行而变化的游戏数据.有哪些方法可以存储这些数据并使其仅在游戏程序中可访问,因此不会被其他人操纵?

DXs*_*ley 8

我们的想法是以这样的方式格式化您的数据,使其不被人类阅读.这可以使用许多方法完成.

  • 将数据保存为二进制.这使得文件难以被人阅读,因此需要使用十六进制编辑器或类似程序.它还使得很难看到一个值结束的位置,另一个值开始(在文本文件中,这由空白显示).另一个优点是你的文件会小很多.
  • 数据加密.可以使用各种方法加密数据.这是一个相当安全的选项,但加密速度可能很慢,因此对于非常大量的数据,这可能不是最佳的,具体取决于需要保存/加载数据的速度.还存在将加密/解密密钥存储在某处(可能在文件本身中,或作为程序中的常量密钥)的问题.
  • 混淆.这是一个广义的术语,指的是使事情难以阅读.例如,两个字符串可以交错以试图使两者都不可读.混淆通常涉及插入大量垃圾数据,该程序未使用的信息,并且仅用于混淆潜在的黑客.
  • 有效性检查.如果有人修改了文件,并且他们不知道他们在做什么,那么他们很可能会对程序产生一些明显的影响.通过这种方式,他们可以简单地摆弄文件,看看你的程序如何反应.抵消这种情况的一种方法是检查所有数据是否在逻辑范围内.数据也可以在文件中多次存储,以不同方式进行模糊处理或加密.如果数据不同,则表示文件已被篡改.


小智 6

您应该将数据存储在二进制文件中.但人们仍然可以改变它(就像我经常在Diablo2:D中更改我的角色的技能点或统计点)所以你应该考虑找到一个算法来计算哈希值并将其存储在你的数据中.