00001
00011 class gugga.crypt.Base64 {
00012
00017 private static var base64chars:String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
00018
00022 public static function encode(src:String):String {
00023 var i:Number = 0;
00024 var output:String = new String("");
00025 var chr1:Number, chr2:Number, chr3:Number;
00026 var enc1:Number, enc2:Number, enc3:Number, enc4:Number;
00027 while (i < src.length) {
00028 chr1 = src.charCodeAt(i++);
00029 chr2 = src.charCodeAt(i++);
00030 chr3 = src.charCodeAt(i++);
00031 enc1 = chr1 >> 2;
00032 enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
00033 enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
00034 enc4 = chr3 & 63;
00035 if(isNaN(chr2)) enc3 = enc4 = 64;
00036 else if(isNaN(chr3)) enc4 = 64;
00037 output += base64chars.charAt(enc1)+base64chars.charAt(enc2);
00038 output += base64chars.charAt(enc3)+base64chars.charAt(enc4);
00039 }
00040 return output;
00041 }
00042
00046 public static function decode(src:String):String {
00047 var i:Number = 0;
00048 var output:String = new String("");
00049 var chr1:Number, chr2:Number, chr3:Number;
00050 var enc1:Number, enc2:Number, enc3:Number, enc4:Number;
00051 while (i < src.length) {
00052 enc1 = base64chars.indexOf(src.charAt(i++));
00053 enc2 = base64chars.indexOf(src.charAt(i++));
00054 enc3 = base64chars.indexOf(src.charAt(i++));
00055 enc4 = base64chars.indexOf(src.charAt(i++));
00056 chr1 = (enc1 << 2) | (enc2 >> 4);
00057 chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
00058 chr3 = ((enc3 & 3) << 6) | enc4;
00059 output += String.fromCharCode(chr1);
00060 if (enc3 != 64) output = output+String.fromCharCode(chr2);
00061 if (enc4 != 64) output = output+String.fromCharCode(chr3);
00062 }
00063 return output;
00064 }
00065
00066 }