unity的AssetBundle资源加密(记录备忘)

转载 2015年07月08日 10:53:56

转自:http://edu.china.unity3d.com/learning_document/getData?file=/Manual/protectingcontent.html


仅管资源 (Assets) 在传输时可使用加密进行保护,但在数据流入客户手中后,其内容就有可能被获取。例如,有工具可记录驱动程序级别上的 3D 数据,允许用户提取传送至 GPU 的模型和纹理。因此,我们通常希望在用户决定提取资源时,能够满足其要求。

当然,如果您需要,也可以对资源包 (AssetBundle) 文件使用自己的数据加密。

一种方法是,使用文本资源 (AssetBundle) 类型将数据存储为字节。您可以加密数据文件,并使用扩展名 .bytes 进行保存,Unity 会将其视为文本资源 (TextAsset) 类型。在编辑器 ( Editor) 中导入后,作为文本资源 (TextAssets) 的文件可导入将置于服务器上的资源包 (AssetBundle)。客户可以下载资源包 (AssetBundle) 并将存储在文本资源 (TextAsset) 中的字节解密为内容。借助此方法,既不会对资源包 (AssetBundles) 加密,又可以将数据作为文本资源 (TextAssets) 保存。

string url = "http://www.mywebsite.com/mygame/assetbundles/assetbundle1.unity3d";
IEnumerator Start () {
// Start a download of the encrypted assetbundle
WWW www = new WWW.LoadFromCacheOrDownload (url, 1);

// Wait for download to complete
yield return www;

// Load the TextAsset from the AssetBundle
TextAsset textAsset = www.assetBundle.Load("EncryptedData", typeof(TextAsset));

// Get the byte data
byte[] encryptedData = textAsset.bytes;

// Decrypt the AssetBundle data
byte[] decryptedData = YourDecryptionMethod(encryptedData);

// Use your byte array.The AssetBundle will be cached
}

另一可用方法是对资源中的资源包 (AssetBundles) 完全加密,然后使用 WWW 类下载资源包。只要服务器将其作为二进制数据提供,则可用任何您喜欢的文件扩展名命名。下载完成后,您可以使用 WWW 实例的 .bytes 属性数据相关的解密程序获取解密的资源包 (AssetBundle) 文件数据,并使用 AssetBundle.CreateFromMemory 在内存中创建资源包 (AssetBundle)。

string url = "http://www.mywebsite.com/mygame/assetbundles/assetbundle1.unity3d";
IEnumerator Start () {
// Start a download of the encrypted assetbundle
WWW www = new WWW (url);

// Wait for download to complete
yield return www;

// Get the byte data
byte[] encryptedData = www.bytes;

// Decrypt the AssetBundle data
byte[] decryptedData = YourDecryptionMethod(encryptedData);

// Create an AssetBundle from the bytes array
AssetBundle bundle = AssetBundle.CreateFromMemory(decryptedData);

// You can now use your AssetBundle.The AssetBundle is not cached.
}

第二种方法之于第一种方法的优势在于,可使用任何类函数(AssetBundles.LoadFromCacheOrDownload 除外)传输字节,并且可对数据进行完全加密 – 例如,插件中的套接字。缺点在于无法使用 Unity 的自动缓存功能进行缓存。可使用所有播放器(网页播放器 (WebPlayer) 除外)在磁盘上手动存储文件,并使用 AssetBundles.CreateFromFile 加载文件。

第三种方法结合了前两种方法的优点,可将资源包 (AssetBundle) 另存为其他普通资源包中的文本资源 (TextAsset)。系统会缓存包含已加密资源包 (AssetBundle) 的未加密资源包。然后会将原始资源包 (AssetBundle) 加载到内存,并使用 AssetBundle.CreateFromMemory 解密并实例化。

string url = "http://www.mywebsite.com/mygame/assetbundles/assetbundle1.unity3d";
IEnumerator Start () {
// Start a download of the encrypted assetbundle
WWW www = new WWW.LoadFromCacheOrDownload (url, 1);

// Wait for download to complete
yield return www;

// Load the TextAsset from the AssetBundle
TextAsset textAsset = www.assetBundle.Load("EncryptedData", typeof(TextAsset));

// Get the byte data
byte[] encryptedData = textAsset.bytes;

// Decrypt the AssetBundle data
byte[] decryptedData = YourDecryptionMethod(encryptedData);

// Create an AssetBundle from the bytes array
AssetBundle bundle = AssetBundle.CreateFromMemory(decryptedData);

// You can now use your AssetBundle.The wrapper AssetBundle is cached
}

unity3D资源的安全考虑,即AssetBundle的加密,解密。

点击打开工程资源包 AssetBundle本来就不是安全的,我们可以将AssetBundle包,转换成byte流,然后加载的时候通过byte流加载。 转换为byte流的时候可以添加加密方法;在加载...

Unity小贴士 导出资源文件和简单加密方式

原创文章,转载请注明出处。 记得当初开发手游时,在看到了各类软件对IL的强大反编译功能和disunity的解包能力后,跟我同一个组的师兄不禁发出了感叹,“有种不穿衣服走在大街上的感觉”。 可以...
  • qdvhil
  • qdvhil
  • 2015年04月16日 13:37
  • 1950

Unity3d 游戏资源打包加密(图片/XML/TXT等) C#编码 (一)

对于Unity,虽然Unity自身会进行压缩加密,但是其解密算法在网上随处可见,如果自己觉得游戏里面的资料具有保密性质,请对其进行自行加密。 本文只是讲述一下过程,采用很简单的打包加密方法,至于需要什...

unity3d 资源打包加密 整理

资源打包脚本,放到Assets\Editor 文件夹下 using UnityEngine; using System.Collections; using UnityEditor; usi...
  • cbbbc
  • cbbbc
  • 2016年08月26日 13:06
  • 993

客户端资源加密

客户端资源加密        资源是我们游戏中用的的图片,纹理,或者声音,追根到底,计算机只识别 0和1,所以不管在磁盘还是内存,存储单元都是0和1,所以这些资源都是可以读取二进制的方式读取到内存中...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Unity3d 用TextAsset打包加密

Unity发布工程时,如果想把一个非文本文件(比如Asset Bundle)也打包到发布包里,应该怎么办。我们知道,发布工程时,所有的文件,或者叫Assets,都要被序列化(Serialized),发...

Unity3D学习笔记之AssetBundle包加密

保护资源管理文件的相关内容 Unity允许用户使用AssetBundle.CreateFromMemory从一个 byte[]数组中建立一个AssetBundle的对象。在运行传输解密时,可以用这种加...

Unity3D AssetBundle包加密

保护资源管理文件的相关内容 Unity允许用户使用AssetBundle.CreateFromMemory从一个 byte[]数组中建立一个AssetBundle的对象。在运行传输解密时,可以用这种加...

Unity3D 游戏加密解密那些事

0x01 加密 加密主要是为了防止美术资源被窃取(换皮)和代码被恶意修改(外挂辅助,广告,二次打包) 1.资源的加密 先说说Unity加载资源的方式,第一种Resources.Load,第二种Asse...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:unity的AssetBundle资源加密(记录备忘)
举报原因:
原因补充:

(最多只允许输入30个字)