一、简介

在Unity3d商店中看到一款存档读档的插件,下载量挺大的,找了个试用版本的玩了下,使用确实挺方便。而且支持不止对数据对存储,包括类对象、资源文件等。
unity3d资源商店页面

二、简单的测试使用

简单的直接存储一个整型:

ES3.Save<int>("123",1);
int v = ES3.Load<int>("123");

或者一个对象:

TestStruct testStruct = new TestStruct();
testStruct.id = 0x11111;
testStruct.name = "32131";
testStruct.pic = 1981;
ES3.Save<TestStruct>("1234", testStruct);
TestStruct v1 = ES3.Load<TestStruct>("1234");

采用默认文件存储,存储在/sdcard/Android/data/[packagename]/files下,对应内容:
在这里插入图片描述
支持AES加密,加密后存入数据。

var settings = new ES3Settings(ES3.EncryptionType.AES, "myPassword12345612345678");
ES3.Save<TestStruct>("12345", testStruct, Application.persistentDataPath + "/TestEncode.es3", settings);
TestStruct v2 = ES3.Load<TestStruct>("12345", Application.persistentDataPath + "/TestEncode.es3", settings);

三、分析

1、优势
(1)代码全采用C#开发,基本不涉及平台相关,维护和跨平台都十分方便;
(2)存档和读档基本只需一条语句即可实现,二次开发成本低;
(3)多功能的支持,如自动存档。

2、劣势
(1)默认处理不做加密强度基本不保障,而且数据保存在sdcard,篡改本地数据非常方便;
(2)加密后采用的AES标准算法,只需要找到密钥就能达到篡改数据的目的。
数据篡改只考虑本地静态数据篡改实现。

四、改进方案

1、考虑基于平台的代码保护,将数据解析存储代码最好通过C/C++实现;
2、键值考虑不使用有意义的字符串,使用宏定义的数字或无意义字符串;
3、采用多层嵌套自定义加密;
4、针对存档数据有独立的哈希校验;
5、json格式保存,考虑转化为另外一种独立的格式或者文件结构,和json可以进行相互关联转化,自定义格式更方便本地存取,无需读取整个文件。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐