Unity本地游戏存档加密 | 您所在的位置:网站首页 › u3d解密 › Unity本地游戏存档加密 |
大佬们复杂的加密我看不懂┭┮﹏┭┮。 我自己对游戏存档加密的理解,仅仅是让玩家打开游戏存档txt或者json文件的时候,显示一堆乱码而已。 我自己简单实现了一个游戏本地数据加密(我也不知道这样有没有用),思路是: 1.将游戏数据都存放在字典或者集合里,然后使用unity自带的JsonUtility.ToJson()方法,获取序列化的字符串(str1)。 2.将获取到的字符串(str1)转换成字节数组byte[](假设名字为byte1),将该数组的每一个字节都右移>>2(这个过程可以更复杂一些)。 3.将简单处理过的字节数组(byte1)直接写入text.json或者text.txt文件(后缀名应该可以改得更不同寻常一点,反正别让玩家认出这是个存档文件就好) 4.读取数据,将文件读到新的byte[](假设名字为byte2),将该数组的每一个字节都左移> 2); resData[i + 1] = (byte)(((oriData[i] & (0b00000011)) 6)); } //查看结果 string s2=System.Text.Encoding.Default.GetString(oriData2); print(s2); } 处理方式是把每个字节向后移动两位 没有移位的文本本来是这样的: 移位后的文本是这样的: 读取乱码文本的结果也是正确的: 关于Dictionary的序列化,unity自带的是不行的,结果为{}。也无法直接的对List对象进行序列化和反序列化,需要将List包装(Wrap)到一个类当中,然后序列化和反序列化包含这个List的对象即可。 序列化dictionary的方法是用两个list分别代表key和value,然后序列化两个list。 代码如下(找不到那篇文章了): public class SerializeDictionary { public static string DicToJson(Dictionary dic) { return JsonUtility.ToJson(new SerializeDictionary(dic)); } public static Dictionary DicFromJson(string str) { return JsonUtility.FromJson(str).ToDictionary(); } } [Serializable] public class SerializeDictionary : ISerializationCallbackReceiver { [SerializeField] List keys; [SerializeField] List values; Dictionary target; public Dictionary ToDictionary() { return target; } public SerializeDictionary(Dictionary target) { this.target = target; } public void OnBeforeSerialize() { keys = new List(target.Keys); values = new List(target.Values); } public void OnAfterDeserialize() { var count = Math.Min(keys.Count, values.Count); target = new Dictionary(count); for (var i = 0; i < count; ++i) { target.Add(keys[i], values[i]); } } } |
CopyRight 2018-2019 实验室设备网 版权所有 |