zl程序教程

您现在的位置是:首页 >  其他

当前栏目

AssetBundle加密

加密 AssetBundle
2023-06-13 09:11:38 时间

新版本里针对AssetBundle格式简单并且容易破解的问题,推出了加密功能,目前加密需要AssetBundle为LZ4压缩格式,其它格式的加密后续推出。这里说一下常用的压缩方式及对应的压缩算法。

首先我们打包用的API:.BuildPipeline.BuildAssetBundles(BuildPath,BuildAssetBundleOptions, BuildTarget); 压缩方式在第二个参数进行设置,是一个枚举值

常用的三种压缩方式及区别:

1.BuildAssetBundleOptions.None: 使用LZMA算法压缩,压缩的包更小,但是加载时间更长。使用之前需要整体解压。一旦被解压,这个包会使用LZ4算法重新压缩。使用资源的时候不需要整体解压。在下载的时候可以使用LZMA算法,一旦它被下载了之后,它会使用LZ4算法保存到本地上。

2.BuildAssetBundleOptions.UncompressedAssetBundle: 不压缩,包大,加载快。

3.BuildAssetBundleOptions.ChunkBasedCompression: 使用LZ4算法压缩,压缩率没有LZMA高,但是我们可以加载指定资源而不需要解压全部。

使用LZ4算法压缩,可以获得可以跟不压缩相媲美的加载速度,而且比不压缩文件要小。目前AB包加密需要LZ4压缩格式,也就是上面提到的ChunkBasedCompression方式。

加密方法(官方有相应的加密文档):

1.构建AB包时,先指定本次build所使用的加密秘钥,密钥长度为16为字符(128bit):

BuildPipeline.SetAssetBundleEncryptKey("0123456789abcdef");

然后指定BuildAssetBundleOptions 包含:ChunkBasedCompression和EnableProtection:

BuildPipeline.BuildAssetBundles(assetbundleBuildPath, BuildAssetBundleOptions.ChunkBasedCompression | BuildAssetBundleOptions.EnableProtection, EditorUserBuildSettings.activeBuildTarget);

通过指定密钥为null来清除秘钥:BuildPipeline.SetAssetBundleEncryptKey(null);

2.加载AssetBundle时,先指定本次加载所使用的解密秘钥:AssetBundle.SetAssetBundleDecryptKey(rightUserKey);然后加载AssetBundle,常用的加载方式: 1).AssetBundle.LoadFromFile

2).AssetBundle.LoadFromMemory 3).WWW.LoadFromCacheOrDownload 不过现在新版本里www类已经过时。 4).UnityWebRequest

最后也是通过指定密钥为null来清除秘钥:BuildPipeline.SetAssetBundleEncryptKey(null);