• AS3读取加密XML


    首先要确定xml使用了哪些加密方式,这样在As3中就反过来解密。

    我加密xml的方式是先将xml文件打包为一个压缩文件,然后将压缩文件进行RC4加密,最后用base64将加密过的压缩包转为base64字符串再将字符串用一个xml保存起来,下面是加密的delphi代码

    procedure TConfigController.EncryptXML(xmlPath,saveToFile:WideString);
    var
      zipmst:TZipMaster19;
      tempFile,key:string;
    
     xmlDocument:IXMLDocument;
     rootNode,cdnode:IXMLNode;
     list:TTntStringList;
    begin
         { Zip in to a file }
          try
            zipmst:=TZipMaster19.Create(nil);
            tempFile:=WAddSlash(WideExtractFilePath(xmlPath)) + 'temp.xml';
            with zipmst do
              begin
                Active:=true;
                DLLDirectory:=ExtractFilePath(ParamStr(0));
           
                FSpecArgs.Add(xmlPath);
                ZipFileName:=tempFile;
                RootDir:=ExtractFilePath(xmlPath);
              end;
            zipmst.Add;
            key := GetKeyString;
            TRC4Encrypter.EncryptFile(key, tempFile, saveToFile);
            StreamToBase64(saveToFile);
            list:=TTntStringList.Create;
            list.LoadFromFile(saveToFile);
            xmlDocument:=TXMLDocument.Create(nil);
            xmlDocument.Active:=true;
            xmlDocument.Version := '1.0';
            xmlDocument.Encoding := 'utf-8';
            rootNode:=xmlDocument.AddChild('Data');
            cdnode:=xmlDocument.CreateNode(list.Text,ntCData);
            rootNode.ChildNodes.Add(cdnode);
            xmlDocument.SaveToFile(saveToFile);
            DeleteFile(tempFile);
          finally
            if Assigned(zipmst) then FreeAndNil(zipmst);
            if Assigned(list) then FreeAndNil(list);
            xmlDocument.Active:=false;
          end;
    end;

    as3解密过程就反过来,下面是as3读取并解密取得真正的xml数据

        private function onCompleteHandler(event:Event):void
            {
                var xml:XML;
                if(isEncrypt&&_key.length>0){
                    xml=XML(event.target.data);
                    // Base64解码
                    var byteArr:ByteArray=Base64.decode(xml.toString());
                    byteArr.position=0;
                    byteArr.readUTFBytes(byteArr.length);
                    xml=null;
                    //rc4解码
                    var keyStr:String=key;
                    keyStr=Hex.fromString(keyStr);
                    var keyArr:ByteArray=Hex.toArray(keyStr);
                    var rc4:ARC4=new ARC4(keyArr);
                    rc4.decrypt(byteArr);
                    rc4.dispose();
                    keyArr.clear();
                    
                    var zip:FZip=new FZip();
                    zip.loadBytes(byteArr);
                    var zipFile:FZipFile=zip.getFileByName('config.xml');
                    if(zipFile!=null){
                        var xmlBytes:ByteArray=zipFile.content;
                        xml=XML(xmlBytes.toString());
                        xmlBytes.clear();
                    }
                    zip.close();
                }else{
                    xml=XML(event.target.data);
                }
                if(xml!=null){
                    if(_onComplete){
                        _onComplete.apply(null,[xml]);
                    }
                }else if(_onError!=null){
                    
                    _onError.apply(null,["Xml file load fail!"]);
                }
                loader.removeEventListener(IOErrorEvent.IO_ERROR,onLoaderIOErrorHandler);
                loader.removeEventListener(ProgressEvent.PROGRESS,onProgressHandler);
                loader.removeEventListener(Event.COMPLETE,onCompleteHandler);
            }
  • 相关阅读:
    商品列表双向联动 better-scroll
    【2020省选模拟】题解
    【洛谷 P3643】【APIO2016】 划艇(DP)
    【洛谷 P4384】 [八省联考2018]制胡窜(SAM / 线段树合并)
    【BZOJ #2034】 [2009国家集训队]最大收益(贪心 / 匈牙利算法)
    【BZOJ #4977】【[Lydsy1708月赛】 跳伞求生(模拟费用流)
    【洛谷 P5825】 排列计数(二项式反演 / 多项式 / 生成函数)
    【2020省选模拟】题解
    【LOJ #6068】「2017 山东一轮集训 Day4」棋盘(费用流)
    【洛谷 P4564】 【CTSC2018】假面(概率DP)
  • 原文地址:https://www.cnblogs.com/skybdemq/p/3630748.html
Copyright © 2020-2023  润新知