точно не вспомню где мне боком такая сторка вылезла, но она была ущербной. использовал какраз bytearray и его метод writeMultyByte с нужной кодировкой.
вот так примерно получилось:

Код AS3:
public static function crypt(stringData:String, passwordData:String = '5abaa65', charSet:String = 'utf-8'):ByteArray {
var string :ByteArray = new ByteArray();
var password:ByteArray = new ByteArray();
string.writeMultiByte (stringData, charSet);
password.writeMultiByte (passwordData, charSet);
var stringInd:uint = 0;
var passwordInd:uint = 0;
string.position = 0;
password.position = 0;
var stringLen:uint = string.length;
var passwordLen:uint = password.length;
while (stringInd<stringLen){
passwordInd = 0;
while (passwordInd < passwordLen) {
string[stringInd] ^= password[passwordInd];
passwordInd++;
}
stringInd++;
}
return string;
}