flex加密

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
 <mx:Script>
  <![CDATA[
   import com.hacker.DataXXTEA;
   private function test():void{
    var ss:String=DataXXTEA.encrypt(strTxt.text,key.text);
    var ss2:String=DataXXTEA.decrypt(ss,key.text);
    s1.text=ss;
    s2.text=ss2;
   }
  ]]>
 </mx:Script>
 <mx:Button x="276" y="151" label="TEA" height="36" width="85" click="test();"/>
 <mx:TextArea x="108" y="231" id="s1"/>
 <mx:TextArea x="354" y="231" id="s2"/>
 <mx:TextArea x="108" y="52" id="strTxt"/>
 <mx:TextArea x="354" y="52" id="key"/>
 <mx:Label x="314" y="66" text="KEY:" fontWeight="bold"/>
 <mx:Label x="56" y="66" text="StrTxt:" fontWeight="bold"/>
</mx:Application>

 

import com.hacker.DataXXTEA;

 

    package com.hacker{   
                          
         public class DataXXTEA{   
                    
                 public function DataXXTEA(){   
                         throw new Error("XXTEA class is static container only");   
                  }   
                    
                 private static function long2str(v:Array,w:Boolean):String {   
                          var vl:uint = v.length;   
                          var sl = v[vl - 1] & 0xffffffff;   
                         for (var i:uint = 0; i < vl; i++){   
                                  v[i] = String.fromCharCode(v[i] & 0xff,   
                                                             v[i] >>> 8 & 0xff,   
                                  v[i] >>> 16 & 0xff,   
                                  v[i] >>> 24 & 0xff);   
                          }   
                         if(w){   
                                 return v.join('').substring(0, sl);   
                          }   
                         else {   
                                 return v.join('');   
                          }   
                  }   
                    
                 private static function str2long(s:String,w:Boolean):Array {   
                          var len:uint = s.length;   
                          var v:Array = new Array();   
                         for (var i:uint = 0; i < len; i += 4){   
                                  v[i >> 2] = s.charCodeAt(i)   
                                  | s.charCodeAt(i + 1) << 8  
                                  | s.charCodeAt(i + 2) << 16  
                                  | s.charCodeAt(i + 3) << 24;   
                          }   
                         if (w) {   
                                  v[v.length] = len;   
                          }   
                         return v;   
                  }   
                    
                 public static function encrypt(char:String,key:String):String{   
                         if(char == ""){   
                                 return "";  

                          }   
                          var v:Array = str2long(StringUtil.utf16to8(char), true);   
                          var k:Array = str2long(key, false);   
                          var n:uint = v.length - 1;   
                            
                          var z:Number = v[n];   
                          var y:Number = v[0];   
                          var delta:Number = 0x9E3779B9;   
                          var mx:Number;   
                          var q:Number = Math.floor(6 + 52 / (n + 1))   
                          var sum:Number = 0;   
                         while (q-- > 0) {   
                                  sum = sum + delta & 0xffffffff;   
                                  var e:Number = sum >>> 2 & 3;   
                                 for (var p:uint = 0; p < n; p++) {   
                                          y = v[p + 1];   
                                          mx = (z >>> 5 ^ y << 2) + (y >>> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z);   
                                          z = v[p] = v[p] + mx & 0xffffffff;   
                                  }   
                                  y = v[0];   
                                  mx = (z >>> 5 ^ y << 2) + (y >>> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z);   
                                  z = v[n] = v[n] + mx & 0xffffffff;   
                          }   
                         return long2str(v, false);   
                  }   
                    
                 public static function decrypt(char:String,key:String):String{   
                         if (char == "") {   
                                 return "";   
                          }   
                          var v:Array = str2long(char, false);   
                          var k:Array = str2long(key, false);   
                          var n:uint = v.length - 1;   
                            
                          var z:Number = v[n - 1];   
                          var y:Number = v[0];   
                          var delta:Number = 0x9E3779B9;   
                          var mx:Number;   
                          var q:Number = Math.floor(6 + 52 / (n + 1));   
                          var sum:Number = q * delta & 0xffffffff;   
                         while (sum != 0) {   
                                  var e:Number = sum >>> 2 & 3;   
                                 for (var p:uint = n; p > 0; p--) {   
                                          z = v[p - 1];   
                                          mx = (z >>> 5 ^ y << 2) + (y >>> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z);   
                                          y = v[p] = v[p] - mx & 0xffffffff;   
                                  }   
                                  z = v[n];   
                                  mx = (z >>> 5 ^ y << 2) + (y >>> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z);   
                                  y = v[0] = v[0] - mx & 0xffffffff;   
                                  sum = sum - delta & 0xffffffff;   
                          }   
                            
                         return StringUtil.utf8to16(long2str(v, true));   
                  }   
          }   
 }   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值