欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-15 17:13:36
...

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

原始数据:

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

加密之后的数据:

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