游戏数据安全----一个关于游据加密的简单代码实现
1. 一个思路
一般游戏数据的安全性,在项目的后期才会考虑到,尤其是像休闲益智类、玩法吸睛而且迭代快速的游戏类型,一旦在市场上出现,为了避免相同类型竞品短时间内蜂拥而至,游戏数据的安全性就显得更为重要,进而影响到游戏团体的盈利模式。
游戏数据安全一般是指对游戏中的资源进行加密,主要是代码层的加密(Unity使用开源mono运行商开发的代码逻辑,读取Assembly-CSharp.dll的脚本解释执行)、数据加密(比如游戏玩法的核心配置文件,如最常见的json文件)、资源加密(如游戏中特别精美的模型的贴图甚至特效很炫酷的shader等)。考虑到unity在打包时候,Resources文件夹下的东西都会打包到resources.assets下,这样如果使用合适的解包工具,这些资源将会直接暴露出来。
这里通过一个demo,先实现游戏中数据的加密。数据的加密算法常见的有MD5、Base64等。资源加密和代码层面的加密,这两个题目留待以后完善。
这里提到的加密算法很简单,使用到的知识是异或运算:^,比如对字符“a”进行十进制121异或运算,“a”的ASCII码 0110 0001,121的二进制为 0111 1001:
0110 0001(97)
^ 0111 1001(121)
---------------------------
0001 1000(24)
得到的结果再次进行121的异或运算:
0001 1000(24)
^ 0111 1001(121)
---------------------------
0110 0001(97)
这样得到的结果就是最开始字符“a”的二进制值:0110 0001(97)
2.代码实现
private static string ____(string s)
{
int key = 121;
StringBuilder inSb = new StringBuilder(s);
StringBuilder outSb = new StringBuilder(s.Length);
char c;
for (int i = 0; i < s.Length; i++)
{
c = inSb[i];
c = (char)(c ^ key);
outSb.Append(c);
}
return outSb.ToString();
}
说明:
生成数据的时候,使用该方法加密,然后保存在本地,在代码中使用的时候,再次调用该函数,还原数据。
很显然,该方法逻辑并不复杂,而且操作不吃性能,日你故意理解。但是缺点是由于过程简单,解密也相对比较简单,但是如果这样的话,也一定要相同的key才可以。
原始数据:
加密之后的数据:
上一篇: FMDB使用,事务,多线程,加密等比较全面的用法。
下一篇: 拿来主义之_Md5加密算法