加入收藏 | 设为首页 | 会员中心 | 我要投稿 拼字网 (https://www.pinziwang.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 安全 > 正文

AssetBundle默认是不加密的

发布时间:2022-11-07 10:19:17 所属栏目:安全 来源:
导读:  AssetBundle默认是不加密的,使用AssetStudio工具是可以对资源进行解密的,加密方式有很多种。1、unity中国区提供的一种加密方式

  1.1、打包前先设置秘钥:(秘钥是16位的任意数字字母组合)

  A

  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进行加载。
 

(编辑:拼字网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!