Unity本地游戏存档加密 您所在的位置:网站首页 u3d解密 Unity本地游戏存档加密

Unity本地游戏存档加密

2023-06-21 13:21| 来源: 网络整理| 查看: 265

大佬们复杂的加密我看不懂┭┮﹏┭┮。

我自己对游戏存档加密的理解,仅仅是让玩家打开游戏存档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 实验室设备网 版权所有