/**
* Copyright WLAD ( http://wonderfl.net/user/WLAD )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/lOHK
*/
package {import flash.display.Sprite;public class FakeStage extends Sprite {public function FakeStage() {addChild(new Main());}}}
import flash.events.*;
import flash.display.*;
import com.bit101.components.*;
class Main extends Sprite
{
//Top text area
private var txt1:TextArea;
//Button text area
private var txt2:TextArea;
public function Main()
{
addEventListener(Event.ADDED_TO_STAGE,init);
}
private function init(e:Event):void
{
iniComponents();
}
private function doEncode(e:Event):void
{
try {
//TODO: fix this shit???
/*
var ba:ByteArray = new ByteArray();
//ba.writeUTFBytes(txt2.text);
ba.writeUTF(txt2.text);
txt1.text = Base64.encode(ba);
*/
txt1.text = Base64.encode(convertStringToByteArray(txt2.text)).toString();
} catch(e:Error) {
txt1.text = e.toString() + "\n\nToo short?";
}
}
private function doDecode(e:Event):void
{
try {
/*
var ba:ByteArray = new ByteArray();
ba.writeUTF(txt1.text);
txt2.text = ba.toString();
*/
txt2.text = Base64.decode(txt1.text).toString();
//txt2.text = String(Base64.decode(txt1.text).readObject());
} catch(e:Error) {
txt2.text = e.toString() + "\n\nToo short?";
}
}
//http://stackoverflow.com/questions/3477978/as3-can-bytearray-return-its-content-as-a-string-with-two-bytes-per-unicode-cha
public function convertStringToByteArray(str:String):ByteArray {
var result:ByteArray = new ByteArray();
for (var i:int = 0; i < str.length; ++i) {
result.writeShort(str.charCodeAt(i));
}
result.position = 0;
return result;
}
private function iniComponents():void
{
var w:int = int(stage.stageWidth);
var h:int = int(stage.stageHeight);
var space:int = 40;
var space2:int = 5;
var btn:PushButton;
txt1 = new TextArea(this,space2 ,space2,"");
txt1.width = w - space2 * 2;
txt1.height = h / 2 - space - space2 * 2;
txt2 = new TextArea(this,space2,h / 2 + space,"");
txt2.width = txt1.width /= 2;
txt2.height = txt1.height /= 2;
txt2.scaleX = txt1.scaleX = txt2.scaleY = txt1.scaleY = 2;
btn = new PushButton(this,space2, h / 2 - space / 2 , "\\/ Decode to Base64 \\/",doDecode);
btn.height = space;
btn.width = w / 2 - space2 * 3;
btn = new PushButton(this,w / 2 + space2, h / 2 - space / 2 , "/\\ Encode from Base64 /\\",doEncode);
btn.height = space;
btn.width = w / 2 - space2 * 3;
}
}
/* Base64 library for ActionScript 3.0. * Based on: Ma Bingyao code. * Optimized by: Jean-Philippe Auclair / jpauclair.wordpress.com * Copyright (C) 2007 Ma Bingyao <andot@ujn.edu.cn> * LastModified: Oct 26, 2009 * This library is free. You can redistribute it and/or modify it. */
import flash.utils.ByteArray;
class Base64
{
private static const _encodeChars:Vector.<int> = InitEncoreChar();
private static const _decodeChars:Vector.<int> = InitDecodeChar();
public static function encode(data:ByteArray):String {var out:ByteArray = new ByteArray();out.length = (2 + data.length - ((data.length + 2) % 3)) * 4 / 3;var i:int = 0;var r:int = data.length % 3;var len:int = data.length - r;var c:int;while (i < len){c = data[i++] << 16 | data[i++] << 8 | data[i++];c = (_encodeChars[c >>> 18] << 24) | (_encodeChars[c >>> 12 & 0x3f] << 16) | (_encodeChars[c >>> 6 & 0x3f] << 8 ) | _encodeChars[c & 0x3f];out.writeInt(c);}if (r == 1){c = data[i];c = (_encodeChars[c >>> 2] << 24) | (_encodeChars[(c & 0x03) << 4] << 16) | 61 << 8 | 61;out.writeInt(c);}else if (r == 2){c = data[i++] << 8 | data[i];c = (_encodeChars[c >>> 10] << 24) | (_encodeChars[c >>> 4 & 0x3f] << 16) | (_encodeChars[(c & 0x0f) << 2] << 8 ) | 61;out.writeInt(c);}out.position = 0;return out.readUTFBytes(out.length);}
public static function decode(str:String):ByteArray {var c1:int;var c2:int;var c3:int;var c4:int;var i:int;var len:int;var out:ByteArray;len = str.length;i = 0;out = new ByteArray();var byteString:ByteArray = new ByteArray();byteString.writeUTFBytes(str);while (i < len){do{c1 = _decodeChars[byteString[i++]];} while (i < len && c1 == -1);if (c1 == -1) break;do{c2 = _decodeChars[byteString[i++]];} while (i < len && c2 == -1);if (c2 == -1) break;out.writeByte((c1 << 2) | ((c2 & 0x30) >> 4));do{c3 = byteString[i++];if (c3 == 61) return out;c3 = _decodeChars[c3];} while (i < len && c3 == -1);if (c3 == -1) break;out.writeByte(((c2 & 0x0f) << 4) | ((c3 & 0x3c) >> 2));do {c4 = byteString[i++];if (c4 == 61) return out;c4 = _decodeChars[c4];} while (i < len && c4 == -1);if (c4 == -1) break;out.writeByte(((c3 & 0x03) << 6) | c4);}return out;}
public static function InitEncoreChar() : Vector.<int> {var encodeChars:Vector.<int> = new Vector.<int>();var chars:String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";for (var i:int = 0; i < 64; i++){encodeChars.push(chars.charCodeAt(i));}return encodeChars;}
public static function InitDecodeChar() : Vector.<int> {var decodeChars:Vector.<int> = new Vector.<int>();decodeChars.push(-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,-1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1);return decodeChars;}
}