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纔可以。
原始數據:
加密之後的數據: