public static FTEncipher AllocLuaScriptFileEncipher()
    {
        byte[]     rgbKey;
        byte[]     rgbIV;
        FTEncipher ret = new FTEncipher();

        ret.CreatePublicKeyRSAEncryptProvider(UniGameResources.uniGameResourcesSupport.LuaRsaPublicKey);
        UniGameResources.uniGameResourcesSupport.ResolveLuaDesKey(out rgbKey, out rgbIV);
        ret.CreateDecryptProvider(rgbKey, rgbIV);
        return(ret);
    }
예제 #2
0
 private static FTEncipher getDecryptHandler()
 {
     if (DecryptHandler != null)
     {
         return(DecryptHandler);
     }
     DecryptHandler = new FTEncipher();
     DecryptHandler.CreatePublicKeyRSAEncryptProvider(publickey);
     byte[] desKeyByte = Encoding.ASCII.GetBytes(deskey);
     byte[] rgbKey     = new byte[8];
     byte[] rgbIV      = new byte[8];
     for (int j = 0; j < 8; j++)
     {
         rgbKey[j] = desKeyByte[j];
         rgbIV[j]  = desKeyByte[j + 8];
     }
     DecryptHandler.CreateDecryptProvider(rgbKey, rgbIV);
     return(DecryptHandler);
 }
    //是否支持及时下载模式
    public void Initialization()
    {
        //移动资源包模式需要加载文件解密器
        //移动模式必须提供资源包列表
        if (UniGameResources.gameResourcesWorkMode == GameResourcesWorkMode.Mode_Mobile)
        {
            xmlFileEncipher       = UniGameResources.AllocXmlFileEncipher();
            luaScriptFileEncipher = UniGameResources.AllocLuaScriptFileEncipher();
        }
        else if (UniGameResources.gameResourcesWorkMode == GameResourcesWorkMode.Mode_AloneSecurity)
        {
            xmlReaderSecurity = new FTLibrary.XML.XmlReaderSecurity();
            xmlReaderSecurity.Initialization(UniGameResources.ConnectPath(UniGameResources.DataPath, UniGameResourcesDefine.DefineAssetBundleName_Config, "\\"));
            xmlPublicReaderSecurity = new FTLibrary.XML.XmlPublicReaderSecurity();
            luaScriptReaderSecurity = new FTLibrary.XML.LuaScriptReaderSecurity();
            luaScriptReaderSecurity.Initialization(UniGameResources.ConnectPath(UniGameResources.DataPath, UniGameResourcesDefine.DefineAssetBundleName_LuaScript, "\\"));

            //需要载入包清单来构建包表
            //这里虚构一份资源进行加载
            GameResourcesNode data = new GameResourcesNode();
            data.packageName = UniGameResourcesDefine.DefineAssetBundleName_Config;
            data.path        = UniGameResourcesDefine.GameAssetBundleInventoryXmlFilePath;
            //载入系统包清单
            UniGameResources.BuildSystemResourcesPackageTable(LoadResource_XmlDocument(ref data, Encoding.Default));
        }

        //定于到资源对象的表内以方便所有资源进行索引
        Dictionary <uint, UniGameResourcesPackage> .Enumerator list = UniGameResources.systemResourcesPackageTable.GetEnumerator();
        while (list.MoveNext())
        {
            resourcesPackageTable.Add(list.Current.Value.packageId, list.Current.Value);
        }
        list.Dispose();


        //开始重建资源表
        //注册所有资源类型
        RegisterResourcesType(UniGameResourcesDefine.ResourcesTypeName_XmlFile, UniGameResourcesDefine.ResourcesTypeIndex_XmlFile);
        RegisterResourcesType(UniGameResourcesDefine.ResourcesTypeName_ResourceFile, UniGameResourcesDefine.ResourcesTypeIndex_ResourceFile);
        RegisterResourcesType(UniGameResourcesDefine.ResourcesTypeName_LanguageResourceFile, UniGameResourcesDefine.ResourcesTypeIndex_LanguageResourceFile);
        RegisterResourcesType(UniGameResourcesDefine.ResourcesTypeName_LuaScript, UniGameResourcesDefine.ResourcesTypeIndex_LuaScript);
        RegisterResourcesType(UniGameResourcesDefine.ResourcesTypeName_String, UniGameResourcesDefine.ResourcesTypeIndex_String);
        RegisterResourcesType(UniGameResourcesDefine.ResourcesTypeName_Prefabs, UniGameResourcesDefine.ResourcesTypeIndex_Prefabs);
        RegisterResourcesType(UniGameResourcesDefine.ResourcesTypeName_PublicXmlFile, UniGameResourcesDefine.ResourcesTypeIndex_PublicXmlFile);
        RegisterResourcesType(UniGameResourcesDefine.ResourcesTypeName_Texture, UniGameResourcesDefine.ResourcesTypeIndex_Texture);
        RegisterResourcesType(UniGameResourcesDefine.ResourcesTypeName_AudioClip, UniGameResourcesDefine.ResourcesTypeIndex_AudioClip);
        RegisterResourcesType(UniGameResourcesDefine.ResourcesTypeName_TimerDefine, UniGameResourcesDefine.ResourcesTypeIndex_TimerDefine);
        RegisterResourcesType(UniGameResourcesDefine.ResourcesTypeName_Material, UniGameResourcesDefine.ResourcesTypeIndex_Material);
        RegisterResourcesType(UniGameResourcesDefine.ResourcesTypeName_PathDefine, UniGameResourcesDefine.ResourcesTypeIndex_PathDefine);
        RegisterResourcesType(UniGameResourcesDefine.ResourcesTypeName_CarList, UniGameResourcesDefine.ResourcesTypeIndex_CarList);

        //一些索引资源需要手动注册以方便读取
        uint configPackageId = 0;

        if (UniGameResources.gameResourcesWorkMode == GameResourcesWorkMode.Mode_Mobile)
        {
            GameResourcesPackage configPackage = LockPackage(UniGameResourcesDefine.DefineAssetBundleName_Config);
            configPackageId  = configPackage.packageId;
            luaScriptPackage = LockPackage(UniGameResourcesDefine.DefineAssetBundleName_LuaScript) as UniGameResourcesPackage;
            LockPackage(UniGameResourcesDefine.DefineAssetBundleName_PublicConfig);
            //这里锁定就不释放了,永远驻留内存
        }
        //注册LUA脚本读取器为从资源中加载脚本
        uniResourcesLuaScriptLoader = new UniResourcesLuaScriptLoader();
        //植入主清单文件
        AddResourcesToTable(UniGameResourcesDefine.ResourcesTypeIndex_XmlFile,
                            UniGameResourcesDefine.DefineResourcesName_MainResourcesFile,
                            configPackageId,
                            UniGameResourcesDefine.DefineAssetBundleName_Config,
                            UniGameResourcesDefine.DefineResourcesPath_MainResourcesFile, -1);
        //加载这个主清单文件
        XmlDocument mainXmlDoc = LoadResource_XmlFile(UniGameResourcesDefine.DefineResourcesName_MainResourcesFile);

        if (mainXmlDoc == null)
        {
            throw new Exception("load main xml Inventory file err!");
        }
        //加载这个资源清单
        BuildResourcesTable(mainXmlDoc);
        //加载其他资源清单
        Dictionary <uint, GameResourcesNode> .Enumerator resourceFileList = GetResourceEnumerator(UniGameResourcesDefine.ResourcesTypeIndex_ResourceFile);
        while (resourceFileList.MoveNext())
        {
            XmlDocument doc = LoadResource_ResourceXmlFile(resourceFileList.Current.Value.name);
            if (doc == null)
            {
                throw new Exception("load xml Inventory file err!");
            }
            //加载这份清单
            BuildResourcesTable(doc);
        }
        resourceFileList.Dispose();
        //资源清单已经加载完成了
        //加载语言定义
        LoadLanguageDefine();
        //外部定义模式不在这里加载语言定义
        if (UniGameResources.gameResourcesWorkModeTwo != GameResourcesWorkModeTwo.Mode_OutGameOptions)
        {
            //加载资源模块使用的LUA脚本
            uniLuaResourcesScript = new UniLuaResourcesScript();
            //选择当前使用的语言
            SelectCurrentLanguage();
            //加载语言资源清单
            LoadLanguageResourcesInventory();
        }
        //加载当前版本信息
        produceVersion.Initialization(LoadResource_PublicXmlFile(UniGameResourcesDefine.ProduceVersionFileName));
        //加载资源卸载器
        UniGameResources.AllocUnloadUnusedAssetsGameObject();
        //加载资源下载器
        UniGameResources.AllocResourcesDownLoadWorker();
    }
예제 #4
0
    public static byte[] Decrypt(byte[] data)
    {
        FTEncipher ftEncipher = getDecryptHandler();

        return(ftEncipher.FileDecrypt(data));
    }
    //加载包清单文件
    public IEnumerator LoadingGameAssetBundleInventoryPackageFile()
    {
        WWW www;

        if (UniGameResources.IsLocalDownloadUrlPath)
        {
            www = WWW.LoadFromCacheOrDownload(FTLibrary.Text.IStringPath.ConnectPath(UniGameResources.downloadUrlPath, UniGameResourcesDefine.GameAssetBundleInventoryPackageFilePath),
                                              UniGameResources.version_GameAssetBundleInventoryPackageFile);
        }
        else
        {
            www = new WWW(FTLibrary.Text.IStringPath.ConnectPath(UniGameResources.downloadUrlPath, UniGameResourcesDefine.GameAssetBundleInventoryPackageFilePath));
        }
        yield return(www);

        if (www.error != null)
        {
            GameRoot.Error(string.Format("资源引导文件下载错误:{0}", www.error));
            yield break;
        }
        byte[] data = null;
        try
        {
#if UNITY_4_3 || UNITY_4_6
            TextAsset textAsset = www.assetBundle.Load(UniGameResourcesDefine.GameAssetBundleInventoryXmlFilePath, typeof(TextAsset)) as TextAsset;
#else
            TextAsset textAsset = www.assetBundle.LoadAsset(UniGameResourcesDefine.GameAssetBundleInventoryXmlFilePath, typeof(TextAsset)) as TextAsset;
#endif
            data = textAsset.bytes;
            UniGameResources.ReleaseOneAssets(textAsset);
            www.assetBundle.Unload(false);
            //当获取一次资源对象的时候实际是克隆一个对象
            //UnityEngine.Object.DestroyObject(www.assetBundle);
            www.Dispose();
        }
        catch (System.Exception ex)
        {
            GameRoot.Error(string.Format("资源引导文件读取错误:{0}", ex.ToString()));
            yield break;
        }

        FTEncipher encipher = null;
        try
        {
            //首先从BASE64转换回来
            data = Convert.FromBase64String(Encoding.ASCII.GetString(data));
            //构建解密组件
            encipher = UniGameResources.AllocXmlFileEncipher();
#if _SupportDeviceVerify
            data = encipher.FileDecrypt(data, true);
#else
            data = encipher.FileDecrypt(data);
#endif //_SupportDeviceVerify
            encipher.Dispose();
            encipher = null;
            MemoryStream s   = new MemoryStream(data);
            XmlDocument  doc = new XmlDocument();
            doc.Load(s);
            s.Close();
            UniGameResources.BuildSystemResourcesPackageTable(doc);
        }
        catch (System.Exception ex)
        {
            GameRoot.Error(string.Format("资源引导文件解析错误:{0}", ex.ToString()));
            if (encipher != null)
            {
                encipher.Dispose();
                encipher = null;
            }
            yield break;
        }
    }