AssetBundle默认是不加密的
1.1、打包前先设置秘钥:(秘钥是16位的任意数字字母组合)
AssetBundle默认是不加密的,使用AssetStudio工具是可以对资源进行解密的,加密方式有很多种。1、unity中国区提供的一种加密方式 1.1、打包前先设置秘钥:(秘钥是16位的任意数字字母组合) AssetBundle.SetAssetBundleDecryptKey("0123456789abcdef"); 可以通过设置 AssetBundle.SetAssetBundleDecryptKey(null)来取消AB包加密 1.2、加载前,先指定加载秘钥( 游戏启动时设置一次就可以了,不需要每次加载都设置) AssetBundle.SetAssetBundleDecryptKey("0123456789abcdef"); 不过这个加密方式有个弊端就是每次资源变动计算出的MD5是不一致的,即使资源还原,再打AB包,计算的MD5值也不会跟之前的重复,这种加密方式用来做热更会比较麻烦,需要自己去做一下处理。 这个就不多说了,继续说第二种加密方式 2、对AB包的二进制文件进行加密操作 不过这种方式加载是需要使用AssetBundle.LoadFromMemoryAsync或者AssetBundle.LoadFromMemory进行加载: AssetBundle abBundle = AssetBundle.LoadFromMemory(File.ReadAllBytes(filePath)); this._loadRequest =AssetBundle.LoadFromMemoryAsync(File.ReadAllBytes(filePath)); 不过这种加密方式需要在先把文件的字节数加载到内存中,再通过API加载文档加密方式,这样会在内存中存在双份内存,会造成较高的内存峰值,所以本人不推荐该加载方式。 3、使用offest加密 原理就是对AssetBundle的二进制文件添加一些字符,来达到加密的目的,废话不多说,直接上代码: 将你需要加密的AB包文件路径传入,你的AB包就加密成功了 public static void ABOffsetEncryption(string fileFile) { byte[] oldData = File.ReadAllBytes(fileFile); int newOldLen = 8 + oldData.Length;//这个空字节数可以自己指定,示例指定8个字节 var newData = new byte[newOldLen]; for (int tb = 0; tb < oldData.Length; tb++) { newData[8+ tb] = oldData[tb]; } FileSt ream fs = File.OpenWrite(fileFile);//打开写入进去 fs.Write(newData, 0, newOldLen); fs.Close(); } 有加密就有解密,unity官方提供的AB包加载API,有提供根据Offset进行加载AB 3.1、同步加载 AssetBundle abBundle = AssetBundle.LoadFromFile(assetBundleMapPath,0,8); 3.2、异步加载 this._loadRequest = AssetBundle.LoadFromFileAsync(this.filePath,0,8); 总结:第一种MD5不稳定,第二种会造成双倍内存,第三种虽然加密简单,但是没有前两者的弊端。 本人推荐第三种通过Offset加密。使用官方提供的API通过Offset进行加载。 (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |