Unity3D内容加密保护

news/2024/11/29 23:47:55/

仅管资源 (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
}

http://www.ppmy.cn/news/466563.html

相关文章

数据加密原理详解

数据加密,是一门历史悠久的技术,指通过加密算法和加密密钥将明文转变为密文,而解密则是通过解密算法和解密密钥将密文恢复为明文。它的核心是密码学。 数据加密仍是计算机系统对信息进行保护的一种最可靠的办法。它利用密码技术对信息进行加密…

Spring Boot整合RSA加密数据传输

简介 吹水时间开始了,是这样的,公司自研开发一个app,因为要运营和上架需要办理安全评估,办理中说到公司app有可能会泄露用户信息,对用户信息没有加密,遇到抓包的可能会导致用户信息泄露,这时我…

Oracle数据库中的数据加密

Oracle数据库中的数据加密 / Oracle数据库DES加密 有个需求,需要对某些敏感信息字段进行脱敏,要求在数据库中不能显示明文。如果目的侧重保护数据而非脱敏的话,可以考虑用表空间透明数据加密(TDE),不过现在…

.NET(C#)常用数据加密和解密方法汇总

欢迎加入Unity业内qq交流群:956187480 qq扫描二维码加群 一、数据加密的概念 1、 基本概念 2、 基本功能 3、 加密形式 二、 数据加密的项目应用和学习 1、 媒体加密:DRM 2、 文件加密:文本加密、pdf、word 3、 数据加密&…

Web常见数据加密方式

MD5加密 6位和32位,加密密文字符串由A-Z,0-9随机分配,80%网站管理员或用户密码加采取MD5加密。(不可逆) SHA加密 由A-Z,0-9随机组合,SHA1,SHA256,SHA384,SHA512长度固定。(不可逆)。对于任意长度的消息,SHA256都会产…

数据传输过程加密方案

文章目录 前言数据加密方案数据加密细节AES加解密 RSA公钥加密总结 前言 从前一篇网络安全基础要点知识介绍中可以知道,在网络通信中,通信传输数据容易被截取或篡改,如果在传输用户隐私数据过程中,被不法分子截取或篡改&#xff…

数据加密标准(DES)概念及工作原理

0x01 数据加密标准DES介绍 数据加密标准(Data Encryption Standard)(DES)是一种用于加密数字数据的对称密钥算法。密钥长度为56位,安全性不强,但它在密码学的进步中具有很大的影响力。 0x02 数据加密标准历…

数据库数据加密及其他安全性保护

数据加密 数据加密 防止数据库中数据在存储和传输中失密的有效手段 加密的基本思想 根据一定的算法将原始数据—明文(Plain text)变换为不可直接识别的格式—密文(Cipher text) 加密方法 存储加密 传输加密 存储加密 透明…