Chinaunix首页 | 论坛 | 博客
  • 博客访问: 591006
  • 博文数量: 60
  • 博客积分: 3993
  • 博客等级: 中校
  • 技术积分: 1572
  • 用 户 组: 普通用户
  • 注册时间: 2005-08-08 17:08
文章分类

全部博文(60)

文章存档

2012年(7)

2011年(35)

2010年(8)

2009年(7)

2008年(3)

分类: Python/Ruby

2011-02-15 18:28:07

google到的AS crc32校验脚本,与我perl tcp数据包校验模块的crc相同,用得上~

在src下创建com/flashrek/utils/CRC32.as
感谢google,感谢flashlizi :)
  1. /** 
  2.  * @name:CRC32(CRC32校验类)
  3.  * @usage:根据java.util.zip中CRC32类写的AS3版CRC32校验类
  4.  * @author:flashlizi
  5.  * @update:2007/06/05
  6.  * @example:
  7. var crc=new CRC32();
  8. var ba:ByteArray=new ByteArray();
  9. var str="123";
  10. ba.writeUTFBytes(str);
  11. crc.update(ba,0,3);
  12. trace(crc.getValue().toString(16).toUpperCase());
  13.  */
  14. package com.flashrek.utils{
  15.     import flash.utils.ByteArray;
  16.     public class CRC32 {
  17.         private var crc32:uint;
  18.         private static var CRCTable:Array=initCRCTable();
  19. /**
  20.  * @usage 更新指定的字节数组的CRC32
  21.  * @param buffer:指定的字节数组,arg:arg[0]为offset偏移量,arg[1]为length
  22. 指定长度
  23.  * 这里可以只指定一个参数buffer,也可以offset,length都指定
  24.  * @return void
  25.  */
  26.         public function update(buffer:ByteArray,...arg):void {
  27.             var offset:int=arg[0]?arg[0]:0;
  28.             var length:int=arg[1]?arg[1]:buffer.length;
  29.             var crc:uint = ~crc32;
  30.             for (var i:int=offset; i < length; i++) {
  31.                 crc = CRCTable[(crc ^ buffer[i]) & 0xFF] ^ (crc >>> 8);
  32.             }
  33.             crc32 = ~crc;
  34.         }
  35. /**
  36.  * @usage
  37.  * @param
  38.  * @return CRC32值
  39.  */
  40.         public function getValue():uint {
  41.             return crc32 & 0xFFFFFFFF;
  42.         }
  43. /**
  44.  * @usage 将CRC32重置为初始值
  45.  * @param
  46.  * @return void
  47.  */
  48.         public function reset():void {
  49.             crc32 = 0;
  50.         }
  51. /**
  52.  * @usage 初始化 CRC table, 长度为256.
  53.  * @param crcTable:CRC table
  54.  * @return 初始化的crcTable,使用标准poly值:0xEDB88320
  55.  */
  56.         private static function initCRCTable():Array {
  57.             var crcTable:Array=new Array(256);
  58.             for (var i:int=0; i < 256; i++) {
  59.                 var crc:uint=i;
  60.                 for (var j:int=0; j < 8; j++) {
  61.                     crc=(crc & 1)?(crc >>> 1) ^ 0xEDB88320:(crc >>> 1);
  62.                 }
  63.                 crcTable[i]=crc;
  64.             }
  65.             return crcTable;
  66.         }
  67.     }
  68. }
perl
  1. use Digest::CRC;
  2. my $ctx=Digest::CRC->new(type=>"crc32");
  3. $ctx->add("abc");
  4. print $ctx->hexdigest;
flex
  1. import com.flashrek.utils.CRC32;
  2. private function chk_crc(str:String):void
  3. {
  4. var crc:CRC32=new CRC32();
  5. var ba:ByteArray=new ByteArray();
  6. ba.writeUTFBytes(str);
  7. crc.update(ba,0,ba.length);
  8. txi_crc.text=crc.getValue().toString(16).toLowerCase();
  9. trace(crc.getValue().toString(16).toLowerCase());
  10. //perl
  11. //use Digest::CRC;
  12. //$ctx=Digest::CRC->new(type=>"crc32");
  13. //$ctx->add("abc");
  14. //print $ctx->hexdigest;
  15. ]]>


阅读(2405) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~