百度首页 | 百度空间
 
查看文章
 
XXTEA加密算法的AS3版
2007/12/28 16:15
XXTEA加密算法的AS3版

引用XXTEA文章说明资料:
“... XXTEA 算法很安全,而且非常快速,非常适合应用于 Web 开发中。但目前似乎很少有人将该算法用于实际开发中。甚至国内尚无介绍该算法的文章(至少在 Google 上搜索不到这方面的中文文章,关于密码学算法的书中也未见提及)。我在 Google 上搜索到了几个国外的 XXTEA 算法的实现(见 参考文献 )...” 。

我这个AS3版是在andot的JavaScript版本基础上修改出来的,我之前也转载过其他版本的XXTEA加密算法,有兴趣可以去看一下!

[ActionScript版本] ActionScript3
[Flash Player版本] Flash 9.0

  1. package com.klstudio.crypto{   
  2.            
  3.         import com.klstudio.util.StringUtil;   
  4.            
  5.         public class XXTEA{   
  6.                    
  7.                 public function XXTEA(){   
  8.                         throw new Error("XXTEA class is static container only");   
  9.                  }   
  10.                    
  11.                 private static function long2str(v:Array,w:Boolean):String {   
  12.                          var vl:uint = v.length;   
  13.                          var sl = v[vl - 1] & 0xffffffff;   
  14.                         for (var i:uint = 0; i < vl; i++){   
  15.                                  v[i] = String.fromCharCode(v[i] & 0xff,   
  16.                                                             v[i] >>> 8 & 0xff,   
  17.                                  v[i] >>> 16 & 0xff,   
  18.                                  v[i] >>> 24 & 0xff);   
  19.                          }   
  20.                         if(w){   
  21.                                 return v.join('').substring(0, sl);   
  22.                          }   
  23.                         else {   
  24.                                 return v.join('');   
  25.                          }   
  26.                  }   
  27.                    
  28.                 private static function str2long(s:String,w:Boolean):Array {   
  29.                          var len:uint = s.length;   
  30.                          var v:Array = new Array();   
  31.                         for (var i:uint = 0; i < len; i += 4){   
  32.                                  v[i >> 2] = s.charCodeAt(i)   
  33.                                  | s.charCodeAt(i + 1) << 8  
  34.                                  | s.charCodeAt(i + 2) << 16  
  35.                                  | s.charCodeAt(i + 3) << 24;   
  36.                          }   
  37.                         if (w) {   
  38.                                  v[v.length] = len;   
  39.                          }   
  40.                         return v;   
  41.                  }   
  42.                    
  43.                 public static function encrypt(char:String,key:String):String{   
  44.                         if(char == ""){   
  45.                                 return "";   
  46.                          }   
  47.                          var v:Array = str2long(StringUtil.utf16to8(char), true);   
  48.                          var k:Array = str2long(key, false);   
  49.                          var n:uint = v.length - 1;   
  50.                            
  51.                          var z:Number = v[n];   
  52.                          var y:Number = v[0];   
  53.                          var delta:Number = 0x9E3779B9;   
  54.                          var mx:Number;   
  55.                          var q:Number = Math.floor(6 + 52 / (n + 1))   
  56.                          var sum:Number = 0;   
  57.                         while (q-- > 0) {   
  58.                                  sum = sum + delta & 0xffffffff;   
  59.                                  var e:Number = sum >>> 2 & 3;   
  60.                                 for (var p:uint = 0; p < n; p++) {   
  61.                                          y = v[p + 1];   
  62.                                          mx = (z >>> 5 ^ y << 2) + (y >>> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z);   
  63.                                          z = v[p] = v[p] + mx & 0xffffffff;   
  64.                                  }   
  65.                                  y = v[0];   
  66.                                  mx = (z >>> 5 ^ y << 2) + (y >>> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z);   
  67.                                  z = v[n] = v[n] + mx & 0xffffffff;   
  68.                          }   
  69.                         return long2str(v, false);   
  70.                  }   
  71.                    
  72.                 public static function decrypt(char:String,key:String):String{   
  73.                         if (char == "") {   
  74.                                 return "";   
  75.                          }   
  76.                          var v:Array = str2long(char, false);   
  77.                          var k:Array = str2long(key, false);   
  78.                          var n:uint = v.length - 1;   
  79.                            
  80.                          var z:Number = v[n - 1];   
  81.                          var y:Number = v[0];   
  82.                          var delta:Number = 0x9E3779B9;   
  83.                          var mx:Number;   
  84.                          var q:Number = Math.floor(6 + 52 / (n + 1));   
  85.                          var sum:Number = q * delta & 0xffffffff;   
  86.                         while (sum != 0) {   
  87.                                  var e:Number = sum >>> 2 & 3;   
  88.                                 for (var p:uint = n; p > 0; p--) {   
  89.                                          z = v[p - 1];   
  90.                                          mx = (z >>> 5 ^ y << 2) + (y >>> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z);   
  91.                                          y = v[p] = v[p] - mx & 0xffffffff;   
  92.                                  }   
  93.                                  z = v[n];   
  94.                                  mx = (z >>> 5 ^ y << 2) + (y >>> 3 ^ z << 4) ^ (sum ^ y) + (k[p & 3 ^ e] ^ z);   
  95.                                  y = v[0] = v[0] - mx & 0xffffffff;   
  96.                                  sum = sum - delta & 0xffffffff;   
  97.                          }   
  98.                            
  99.                         return StringUtil.utf8to16(long2str(v, true));   
  100.                  }   
  101.          }   
  102. }   

类别:c/c++算法 | 浏览() | 评论 (2)
 
最近读者:
 
网友评论:
1
2008/06/11 12:42
import com.klstudio.util.StringUtil; 这个类怎么没有给出来啊 !!!
 
2
2008/06/12 21:08
这个文章不是我的原作。不过谢谢你的关注
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码:
 

     

©2008 Baidu