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

 

 

posted @ 2014-03-28 15:21  skybdemq  阅读(963)  评论(0编辑  收藏  举报