zoukankan      html  css  js  c++  java
  • 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);
            }
  • 相关阅读:
    Cocos2d-x游戏《雷电大战》开源啦!要源代码要资源快快来~~
    Tomcat部署项目时出错java.lang.IllegalStateException: ContainerBase.addChild: start:org.apache.catalina.Life
    PCA主成分分析Python实现
    C语言知识结构之二
    javascript中构造函数的返回值问题和new对象的过程
    poj 1694 An Old Stone Game 树形dp
    Android新技术学习——阿里巴巴免Root无侵入AOP框架Dexposed
    c++中vector向量几种情况的总结(向量指针,指针的向量)
    Hash分析
    三期_day05_Dao层的准备工作_II
  • 原文地址:https://www.cnblogs.com/skybdemq/p/3630748.html
Copyright © 2011-2022 走看看