游戏数据安全----一个关于数据加密的简单代码实现

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才可以。

原始数据:

游戏数据安全----一个关于数据加密的简单代码实现_第1张图片

加密之后的数据:

游戏数据安全----一个关于数据加密的简单代码实现_第2张图片

你可能感兴趣的:(游戏数据加密)