保存和加载数据C++
Saving and Loading Data C++
我知道一种保存程序数据的粗略方法,将其保存在文本文件中。问题是,任何人都可以访问文本文件并对其进行操作。例如,我想保存和加载游戏数据,这些数据会随着游戏的进行而变化。有什么方法可以存储这些数据,并使其只能在游戏程序中访问,这样就不会被其他人操纵?
我们的想法是以这样一种方式格式化数据,使其不被人类读取。这可以通过使用多种方法来实现。
- 将数据保存为二进制这使得文件难以被人类读取,因此需要使用十六进制编辑器或类似程序。这也使得很难看到一个值在哪里结束,另一个值从哪里开始(在文本文件中,用空格显示)。这样做的另一个优点是,您的文件会小得多
- 数据加密可以使用各种方法对数据进行加密。这是一个相当安全的选项,但加密可能很慢,因此对于大量数据,这可能不是最佳的,这取决于数据需要保存/加载的速度。还有一个问题是将加密/解密密钥存储在某个地方(可能在文件本身中,或者作为程序中的常量)
- 困惑这是一个广义的术语,指的是使事物难以阅读。例如,两个字符串可以交错,试图使两者都不可读。混乱通常涉及插入垃圾数据,这些信息不被程序使用,只会让潜在的黑客感到困惑
- 有效性检查如果有人修改了文件,但他们不知道自己在做什么,那么他们很可能会对程序产生明显的影响。通过这种方式,他们可以简单地摆弄文件,看看你的程序是如何反应的。抵消这种情况的一种方法是检查是否所有数据都在逻辑范围内。数据也可以多次存储在文件中,以不同的方式进行模糊处理或加密。如果数据不同,则表示文件已被篡改
您应该将数据存储在二进制文件中。但人们仍然可以更改它(就像我在Diablo2:D中经常更改角色的技能点或统计点一样),所以你应该考虑找到一种算法来计算哈希和并将其存储在你的数据中。
您可以将数据保存在二进制文件中。只需在c++对象中写入和读取位即可。
相关文章:
- 防止主数据类型C++的隐式转换
- 用于访问容器<T>数据成员的正确 API
- 嵌套在类中时无法设置成员数据
- 使用流处理接收到的数据
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在cuda线程之间共享大量常量数据
- C++将文本文件中的数据读取到结构数组中
- 如何在C++中序列化结构数据
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- 在c代码之间共享数据的最佳方式
- 链表,反向函数,数据结构
- 数据成员SFINAE的C++17测试:gcc vs clang
- C++浮点数据类型和字符串数据类型无法子到模板函数中
- 如何对点云数据进行排序
- 从矢量<无符号字符>转换为字符* 包括垃圾数据
- 尝试通过OCI例程从Oracle获取blob数据,但出现错误:ORA-01008:并非所有变量都绑定
- Cuda C++:设备上的Malloc类,并用来自主机的数据填充它
- 在运行时处理类型擦除的数据-如何不重新发明轮子