Другой вариант - использование XOR-шифра с ключом. Этот метод, конечно, полностью разрушаем, но он требует немного больше работы, поэтому для маскировки текста все должно быть в порядке.
Вот простая реализация. (Используется кодер Base64 урагана ; это просто для того, чтобы сделать его бинарно-безопасным, а не добавлять больше мрака)
import com.hurlant.util.Base64;
function applyXor(inputBuffer:ByteArray,key:String):ByteArray {
var outBuffer:ByteArray = new ByteArray();
var keysBuffer:ByteArray = new ByteArray();
keysBuffer.writeUTFBytes(key);
var offset:int = 0;
var inChar:int;
var outChar:int;
var bitMask:int;
while(inputBuffer.bytesAvailable) {
offset = inputBuffer.position % keysBuffer.length;
inChar = inputBuffer.readUnsignedByte();
bitMask = keysBuffer[offset];
outChar = bitMask ^ inChar;
outBuffer.writeByte(outChar);
}
return outBuffer;
}
function encode(input:String,key:String):String {
var inputBuffer:ByteArray = new ByteArray();
inputBuffer.writeUTFBytes(input);
inputBuffer.position = 0;
var out:ByteArray = applyXor(inputBuffer,key);
return Base64.encodeByteArray(out);
}
function decode(input:String,key:String):String {
var inputBuffer:ByteArray = Base64.decodeToByteArray(input);
var out:ByteArray = applyXor(inputBuffer,key);
out.position = 0;
return out.readUTFBytes(out.length);
}
var str:String = "This is some text. Let's add non-ascii chars like Ñ,à,ü, etc, just to test it.";
var key:String = "whatever &^%$#";
var encoded:String = encode(str,key);
var decoded:String = decode(encoded,key);
trace(encoded);
trace(decoded);
trace(decoded == str);