仅管资源 (Assets) 在传输时可使用加密进行保护,但在数据流入客户手中后。其内容就有可能被获取。比如,有工具可记录驱动程序级别上的 3D 数据,同意用户提取传送至 GPU 的模型和纹理。

因此,我们通常希望在用户决定提取资源时。可以满足其要求。

当然,假设您须要。也能够对资源包 (AssetBundle) 文件使用自己的数据加密。

一种方法是,使用文本资源 (AssetBundle) 类型将数据存储为字节。您能够加密数据文件,并使用扩展名 .bytes 进行保存,Unity 会将其视为文本资源 (TextAsset) 类型。在编辑器 ( Editor) 中导入后。作为文本资源 (TextAssets) 的文件可导入将置于server上的资源包 (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 类下载资源包。仅仅要server将其作为二进制数据提供 ,则可用不论什么您喜欢的文件扩展名命名。

下载完毕后。您能够使用 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内容加密保护的更多相关文章

  1. Unity3D 代码加密保护工具

    加密方式   对于Unity3D的保护方式,主要是通过Virbox Protector Standalone对Unity3D程序的整个生成目录进行加密,可以保护Unity的主要代码逻辑不被反编译,最大 ...

  2. .NET 产品版权保护方案 (.NET源码加密保护) (转载)

    说 明:你希望自己用.net辛辛苦苦做出来的软件被人轻易破解吗?你希望自己花了大量人力物力用.net开发出来的产品被竞争对手轻易获取核心代码吗?这是 一篇比较详尽地介绍如何保护自己的.net源代码的文 ...

  3. C#/vbscript/JS如何加密保护HTML/javascript源代码

    原文地址:http://www.coding123.net/article/20121008/encrypt-javascript-by-charp-vbscript.aspx 本文通过将源代码进行u ...

  4. [破解] DRM-内容数据版权加密保护技术学习(上):视频文件打包实现

    1. DRM介绍: DRM,英文全称Digital Rights Management, 可以翻译为:内容数字版权加密保护技术. DRM技术的工作原理是,首先建立数字节目授权中心.编码压缩后的数字节目 ...

  5. [C#防止反编译].NET 产品版权保护方案 (.NET源码加密保护)

    [C#防止反编译].NET 产品版权保护方案 (.NET源码加密保护) 标签: .net加密产品c#dll工具 2011-03-24 21:06 27009人阅读 评论(13) 收藏 举报 分类: C ...

  6. SpringBoot自定义classloader加密保护class文件

    背景 最近针对公司框架进行关键业务代码进行加密处理,防止通过jd-gui等反编译工具能够轻松还原工程代码,相关混淆方案配置使用比较复杂且针对springboot项目问题较多,所以针对class文件加密 ...

  7. .Net加密保护工具分析介绍

    本文主要介绍一些dotNet加密保护工具的原理以及就其脱壳进行简单探讨. remotesoft protector.maxtocode..Net Reactor.Cliprotector.themid ...

  8. NET Framework 4.5新特性 数据库的连接加密保护。

    NET Framework 4.5新特性 (一) 数据库的连接加密保护. NET Framework 4.5 ado.net数据库连接支持使用SecureString内存流方式保密文本.  一旦使用这 ...

  9. 在IOS中使用DES算法对Sqlite数据库进行内容加密存储并读取解密

    在IOS中使用DES算法对Sqlite 数据库进行内容加密存储并读取解密 涉及知识点: 1.DES加密算法: 2.OC对Sqlite数据库的读写: 3.IOS APP文件存储的两种方式及读取方式. 以 ...

随机推荐

  1. vim设置配色主题

    默认主题注释为蓝色,完全看不清.可以在~/.vimrc当中设置colorscheme参数.我在zsh设置中设置了快捷键,直接编辑. colorscheme参数的值可以在 /usr/share/vim/ ...

  2. HDUOJ----4006The kth great number(最小堆...)

    The kth great number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Oth ...

  3. Numpy库应用实例——GPS定位

    背景介绍 定位系统 GPS全球定位系统(Global Positioning System)以GPS系统为例介绍卫星定位的计算方法 GPS定位的基本原理 GPS定位的基本原理是根据高速运动卫星的 ...

  4. 利用Microsoft VC++6.0 的MFC 的绘图工具实现简单图形的绘制

          MFC运算功能强大,拥有完备的绘图功能.       在Windows平台上,应用程序的图形设备接口(graphics device interface,GDI)被抽象为设备上下文(Dev ...

  5. ADO,OLEDB,ODBC,DAO,RDO的区别说明

    http://www.jb51.net/article/31286.htm http://wenku.baidu.com/link?url=D7iis1tmkyXTCqjsezsvYtYHWG8jK- ...

  6. HighCharts: 设置时间图x轴的宽度

    这个x轴宽度的设置整了好久,被老板催的要死 highcharts的api文档很难找,找了半天也没找到,网上资料少,说的试了下,也没有,我用的图里api文档里没有介绍,这个属性不知道的话,根本不好找.为 ...

  7. c# 网站生成静态页面

    在一些需要经常更新页面数据的网站中,一般访问量不是很大的都直接发布的是带后台代码,每次访问都是有数据库交互的.但是一旦访问量增加了,那么这些服务器开销变成本就要考虑进来了,像一些文章,后台编辑后,文章 ...

  8. JFinal 源码知识点

    1.JFinal中自带json工具类,没必要导入其他的转化包. 使用:setAttr("status","success"), renderJson() 会将所 ...

  9. 【Linux】目录配置

    为什么每套Linux distributions的配置文件.执行文件.每个目录内放置的文件其实都差不多?因为有一套需要依据的标准!我们底下就来瞧一瞧. 因为利用Linux来开发产品或distribut ...

  10. LevelDB场景分析1--整体结构分析

    基本用法 数据结构 class DBImpl : public DB { private:     struct CompactionState;     struct Writer;// Infor ...