开启辅助访问
 找回密码
 注册帐号

扫一扫,访问微社区

教程分享

关注:619

当前位置:游戏蛮牛 技术专区 教程分享

查看: 615|回复: 3

[基础知识] Unity3D与flash交互、aes加密解密

[复制链接]  [移动端链接]
抢楼 抢楼 本帖为抢楼帖,欢迎抢楼! 
7日久生情
4246/5000
排名
2112
昨日变化
8

1638

主题

1649

帖子

4246

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
132510
好友
17
蛮牛币
51019
威望
0
注册时间
2015-12-24
在线时间
347 小时
最后登录
2017-5-27
发表于 2015-12-29 11:11:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
  众所周知,unity在2013年就放弃flash了,但是有时候,真的会需要到flash,比如web端需要unity web player插件,很多浏览器都拦截了,flash倒不会,因为他是微软的。

  u3d在打包flash的时候api是不可以修改的,默认就是flash的api,打包出来就是as(ActionScript代码)编译。所以很多net2.0的api都不能使用,比如System.Security.Cryptography这个库,注:这个库是C#集成好的加密解密

  u3d导出flash会报错,因为不支持

  资源加密在任何平台任何程序下都是常见的,我这里使用的AES加密。大部分平台都集成了加密解密库,

  flash的as加密解密库,下载地址:as crypt 其中很多种方式加密解密。比如 aes、des等等,我使用的aes加密解密

  在assets下新建ActionScript文件夹,把下载as加密解密库的放进去,

  测试用例,

  c#代码

[AppleScript] 纯文本查看 复制代码
  using UnityEngine;

  using System.Collections;

  [NotConverted]

  [NotRenamed]

  public static class AesCtypt {

  [NotRenamed]

  public static string response = "5";

  [NotRenamed]

  public static byte[] AESDecrypt(byte[] cipherText, string strKey,byte[] _key1)

  {

  return null;

  }



  这个是u3d的脚本语言,解密用,

  [NotConverted]

  [NotRenamed]

  这个标示说明当前类打包编译的时候,不编译成打包环境脚本,保留原脚本,但是这个也不会被执行,下边说为什么不执行

[AppleScript] 纯文本查看 复制代码
  package

  {

  import flash.utils.ByteArray;

  import System.CLIArrayFactory;

  import System.CLIByteArray;

  import com.hurlant.util.Hex;

  import com.hurlant.crypto.symmetric.IPad;

  import com.hurlant.crypto.symmetric.ICipher;

  import com.hurlant.crypto.symmetric.IVMode;

  import com.hurlant.crypto.symmetric.NullPad;

  import com.hurlant.crypto.Crypto;

  public class AesCtypt

  {

  public static var response : String = "";

  public function AesCtypt()

  {

  }

  public static function AESDecrypt(DesByteData:CLIByteArray,SECRET_KEY:String,SECRET_IV:CLIByteArray):CLIByteArray

  {

  var inputBA:ByteArray= DesByteData.elements;

  var key:ByteArray = Hex.toArray(Hex.fromString(SECRET_KEY));

  var pad:IPad = new NullPad();

  var aes:ICipher = Crypto.getCipher("aes-cbc", key, pad);

  var ivmode:IVMode = aes as IVMode;

  ivmode.IV = SECRET_IV.elements;

  aes.decrypt(inputBA);

  var aesbytedata:CLIByteArray = new CLIByteArray();

  aesbytedata.elements= inputBA;

  return  aesbytedata;

  }

  }

  }



  这是flash端的as脚本,跟C#端的脚本方法变量完全相同,因为打包完成后,会调用as脚本,不会再调用C#的东西了,在unity实现脚本,就是为了不报错,和本地测试使用,打出包后,他调用的就是as代码了。加密跟解密一样直接调用aes.encrypt方法就可以了

  测试用例

[AppleScript] 纯文本查看 复制代码
  using UnityEngine;

  using System.Collections;

  public class LoadFlashAssets : MonoBehaviour {

  string str = "";

  public void OnGUI()

  {

  if(GUI.Button(new Rect(220,10,100,25), "Calculate"))

  {

  string path = "http://100.0.0.0:10001/assets/test.u3d”;//资源路径地址

  StartCoroutine(LoadFlashAsset(path));

  }

  GUI.Label(new Rect(220,100,200,200),str);

  }

  private string key_3D = “你的密码”;

  IEnumerator LoadFlashAsset(string path)

  {

  WWW loader = new WWW(path);

  yield return loader;

  if (loader.error == null && loader.isDone)

  {

  AssetBundleCreateRequest request = null;

  AssetBundle bundle = null;

  byte[] _key1 = { 这里是你的iv密匙 };

  byte[] decryptedDatas = AesCtypt.AESDecrypt(loader.bytes, key_3D,_key1);

  int length = System.Convert.ToInt32(decryptedDatas[decryptedDatas.Length - 1]);

  byte[] decryptedData = new byte[decryptedDatas.Length - 1 - length];

  for(int i = 0; i < decryptedData.Length; i ++)

  {

  decryptedData[i] = decryptedDatas[i];

  }

  request = AssetBundle.CreateFromMemory(decryptedData);

  yield return request;

  bundle = request.assetBundle;

  if (bundle != null)

  {

  GameObject obj = GameObject.Instantiate(bundle.mainAsset) as GameObject;

  }

  }

  }

  }



  这样u3d导出flash的时候,就能实现u3d在flash环境下的加密解密,研究了大概三天才搞定,语言表达能力有限,写的看不明白的朋友大家留言交流。

http://blog.csdn.net/itolfn/article/details/42523285

unity3d flash;unity obj import;flash unity3d;unity import obj

回复

使用道具 举报

排名
22988
昨日变化
13

0

主题

25

帖子

43

积分

Rank: 1

UID
2822
好友
0
蛮牛币
54
威望
0
注册时间
2013-8-29
在线时间
8 小时
最后登录
2016-8-15
发表于 2015-12-29 15:02:43 | 显示全部楼层
玩过的飘过

回复

使用道具 举报

4四处流浪
476/500
排名
4149
昨日变化
4

2

主题

72

帖子

476

积分

Rank: 4

UID
40576
好友
4
蛮牛币
1432
威望
0
注册时间
2014-8-19
在线时间
158 小时
最后登录
2017-4-25
发表于 2016-1-4 09:30:57 | 显示全部楼层
不是adobe的么 怎么变微软的了。。

回复

使用道具 举报

排名
18715
昨日变化
11

1

主题

60

帖子

86

积分

Rank: 2Rank: 2

UID
157355
好友
0
蛮牛币
40
威望
0
注册时间
2016-7-17
在线时间
11 小时
最后登录
2016-9-21
发表于 2016-7-24 09:10:53 | 显示全部楼层
实现u3d在flash环境下的加密解密

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

快速回复 返回顶部 返回列表