遊戲數據安全----一個關於數據加密的簡單代碼實現

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

原始數據:

加密之後的數據:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章