1
13
14 import com.sekati.crypt.ICipher;
15
16
19 class com.sekati.crypt.Base64 implements ICipher {
20
21 private static var base64chars:String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
22
23
28 public static function encode(src:String):String {
29 var i:Number = 0;
30 var output:String = new String( "" );
31 var chr1:Number, chr2:Number, chr3:Number;
32 var enc1:Number, enc2:Number, enc3:Number, enc4:Number;
33 while (i < src.length) {
34 chr1 = src.charCodeAt( i++ );
35 chr2 = src.charCodeAt( i++ );
36 chr3 = src.charCodeAt( i++ );
37 enc1 = chr1 >> 2;
38 enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
39 enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
40 enc4 = chr3 & 63;
41 if(isNaN( chr2 )) enc3 = enc4 = 64;
42 else if(isNaN( chr3 )) enc4 = 64;
43 output += base64chars.charAt( enc1 ) + base64chars.charAt( enc2 );
44 output += base64chars.charAt( enc3 ) + base64chars.charAt( enc4 );
45 }
46 return output;
47 }
48
49
54 public static function decode(src:String):String {
55 var i:Number = 0;
56 var output:String = new String( "" );
57 var chr1:Number, chr2:Number, chr3:Number;
58 var enc1:Number, enc2:Number, enc3:Number, enc4:Number;
59 while (i < src.length) {
60 enc1 = base64chars.indexOf( src.charAt( i++ ) );
61 enc2 = base64chars.indexOf( src.charAt( i++ ) );
62 enc3 = base64chars.indexOf( src.charAt( i++ ) );
63 enc4 = base64chars.indexOf( src.charAt( i++ ) );
64 chr1 = (enc1 << 2) | (enc2 >> 4);
65 chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
66 chr3 = ((enc3 & 3) << 6) | enc4;
67 output += String.fromCharCode( chr1 );
68 if (enc3 != 64) output = output + String.fromCharCode( chr2 );
69 if (enc4 != 64) output = output + String.fromCharCode( chr3 );
70 }
71 return output;
72 }
73
74 private function Base64() {
75 }
76 }