| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 | package {	import flash.utils.ByteArray;	import flash.events.Event;	public class Base64	{		public static const version:String = "2.0.0";		public static function encode(data:String):String		{			var bytes:ByteArray = new ByteArray();			bytes.writeUTFBytes(data);			return encodeByteArray(bytes);		}		private static const BASE64_CHARARR:Vector.<int> = new <int>[65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,48,49,50,51,52,53,54,55,56,57,43,47,61];  ;		public static function encodeByteArray(data:ByteArray):String		{			var output:ByteArray = new ByteArray();			var opbuf0:int;			var opbuf1:int;			var opbuf2:int;			var opbuf3:int;			var dblen:int = 0;			var resultlen:uint = data.length;			var position:uint = 0;			var oplen:uint = 0;			while (resultlen > 0)			{				if (resultlen >= 3)				{					dblen = 3;					resultlen -=  3;				}				else				{					dblen = resultlen;					resultlen = 0;				}				opbuf0 = (data[position] & 0xfc) >> 2;				if (dblen>=1)				{					opbuf1 = ((data[position] & 0x03) << 4) | ((data[position + 1]) >> 4);				}				else				{					opbuf1 = 64;				}				if (dblen>=2)				{					opbuf2 = ((data[position + 1] & 0x0f) << 2) | ((data[position + 2]) >> 6);				}				else				{					opbuf2 = 64;				}				if (dblen>=3)				{					opbuf3 = data[position + 2] & 0x3f;				}				else				{					opbuf3 = 64;				}				output[oplen] = BASE64_CHARARR[opbuf0];				output[oplen + 1] = BASE64_CHARARR[opbuf1];				output[oplen + 2] = BASE64_CHARARR[opbuf2];				output[oplen + 3] = BASE64_CHARARR[opbuf3];				position +=  3;				oplen +=  4;			}			return output.readUTFBytes(oplen);		}		public static function decode(data:String)		{			var bytes:ByteArray = decodeToByteArray(data);			return bytes.readUTFBytes(bytes.length);;		}		public static function decodeToByteArray(_data:String)		{			var output:ByteArray = new ByteArray();			var data:ByteArray = new ByteArray();			data.writeUTFBytes(_data);			var databuf0:int;			var databuf1:int;			var databuf2:int;			var databuf3:int;									var resultlen:uint = data.length;			var position:uint = 0;			var oplen:uint = 0;									while (resultlen>0)			{				databuf0 = find(data[position]);				if (resultlen >= 1)				{					databuf1=find(data[int(position+ 1)]);				}				if (resultlen >= 2)				{					databuf2=find(data[int(position+ 2)]);				}				if (resultlen >= 3)				{					databuf3=find(data[int(position+3)]);				}				if (databuf1 != 64)				{					output[oplen] = (databuf0 << 2) + ((databuf1 & 0x30) >> 4);					if (databuf2 != 64)					{						output[oplen + 1] = ((databuf1 & 0x0f) << 4) + ((databuf2 & 0x3c) >> 2);						if (databuf3 != 64)						{							output[oplen+ 2] = ((databuf2 & 0x03) << 6) + databuf3;						}					}				}				position +=  4;				oplen +=  3;				resultlen = resultlen -  4;			}			return output;		}		public function MyBase64()		{			throw new Error("Base64 class is static container only");		}		public static function find(val:int):int		{			if (val >= 65 && val<=90)			{				return val-65;			}			else if (val >= 97 && val<=122)			{				return 26+val-97;			}			else if (val >= 48 && val<=57)			{				return 52+val-48;			}			else if (val==43)			{				return 62;			}			else if (val==47)			{				return 63;			}			else if (val==61)			{				return 64;			}			return 0;		}	}}
 |