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);

        }

 

 

你可能感兴趣的:(xml)