有哪些选项可以安全地保存游戏数据?我对专门为C ++量身定制的解决方案感兴趣。
我正在寻找一种快速且易于使用的东西。我只关心存储诸如
哪些级别已解锁和未解锁
每个级别的用户得分
我再次好奇地知道有什么用处,可以使用的任何好的库都可以为我提供普通玩家不会碰到的漂亮,安全的游戏数据文件。
我刚刚找到这个位置看起来很漂亮,但它会是巨大的,得到潜在的其他库/选项的一些观点在那里。
有哪些选项可以安全地保存游戏数据?我对专门为C ++量身定制的解决方案感兴趣。
我正在寻找一种快速且易于使用的东西。我只关心存储诸如
哪些级别已解锁和未解锁
每个级别的用户得分
我再次好奇地知道有什么用处,可以使用的任何好的库都可以为我提供普通玩家不会碰到的漂亮,安全的游戏数据文件。
我刚刚找到这个位置看起来很漂亮,但它会是巨大的,得到潜在的其他库/选项的一些观点在那里。
Answers:
首先,假设您有一个非常简单的保存文件,则可以使用文本文件。
最简单的想法之一是使用字符串键来锁定/解锁数据:
void encrypt(string& data,string key)
{
for(unsigned i=0;i<data.size();i++)
data[i] += key[i%key.size()];
}
void decrypt(string& data,string key)
{
for(unsigned i=0;i<data.size();i++)
data[i] -= key[i%key.size()];
}
但是经过一点Google搜索后,我发现了这些链接,这可能会有用:
基于签名的字符是@ v.oddou提到的“未定义行为”,我猜想使用XOR或强制转换为未签名的字符将导致更安全/跨平台的代码。像这样的东西:
void encrypt(string& data,string key)
{
for(unsigned i=0;i<data.size();i++)
data[i] ^= key[i%key.size()];
}
void decrypt(string& data,string key)
{
for(unsigned i=0;i<data.size();i++)
data[i] ^= key[i%key.size()];
}
XOR
而不是增加/减少,因为如果您超出要处理的数据类型的范围(char
我假设),最终可能会导致数据损坏
没有什么可以被视为安全的客户端。有人告诉你这是在说谎。
您可以使用所需的任何加密和加扰方法,但是由于客户端还必须能够对其进行解码,并且用户可以访问客户端本身,因此,如果他足够聪明,则可以访问解密密钥/算法。
您只能给愿意破解它的人增加烦恼,但是如果有足够的时间它就会被破解,您将无法对此做任何事情。
这提供了一些简单的XOR加密:
#include <iostream>
using namespace std;
string encryptDecrypt(string toEncrypt) {
char key[3] = {'K', 'C', 'Q'}; //Any chars will work
string output = toEncrypt;
for (int i = 0; i < toEncrypt.size(); i++)
output[i] = toEncrypt[i] ^ key[i % (sizeof(key) / sizeof(char))];
return output;
}
以及如何使用它:
int main(int argc, const char * argv[])
{
string encrypted = encryptDecrypt("kylewbanks.com");
cout << "Encrypted:" << encrypted << "\n";
string decrypted = encryptDecrypt(encrypted);
cout << "Decrypted:" << decrypted << "\n";
return 0;
}
此代码的输出是这样的:
Encrypted: :=.43*-:8m2$.
Decrypted:kylewbanks.com
这里有一些程序(无论如何都是免费的)可以为您提供帮助,它们基本上都将您的所有资源合并为一个exe。
NBinder现在是一种商业产品,它是一个旧的但实用的版本。
Enigma Virtual Box,另一个具有类似功能的工具。