/** * Encrypts and decrypts an alleged RC4 hash. * @author Mika Palmu * @version 1.0 * * Orginal Flash port by: * Gabor Penoff - http://www.fns.hu * Email: fns@fns.hu */ class com.meychi.ascrypt.RC4 { /** * Variables * @exclude */ private static var sbox:Array = new Array(255); private static var mykey:Array = new Array(255); /** * Encrypts a string with the specified key. */ public static function encrypt(src:String, key:String):String { var mtxt:Array = strToChars(src); var mkey:Array = strToChars(key); var result:Array = calculate(mtxt, mkey); return charsToHex(result); } /** * Decrypts a string with the specified key. */ public static function decrypt(src:String, key:String):String { var mtxt:Array = hexToChars(src); var mkey:Array = strToChars(key); var result:Array = calculate(mtxt, mkey); return charsToStr(result); } /** * Private methods. */ private static function initialize(pwd:Array) { var b:Number = 0; var tempSwap:Number; var intLength:Number = pwd.length; for (var a:Number = 0; a <= 255; a++) { mykey[a] = pwd[(a%intLength)]; sbox[a] = a; } for (var a:Number=0; a<=255; a++) { b = (b+sbox[a]+mykey[a]) % 256; tempSwap = sbox[a]; sbox[a] = sbox[b]; sbox[b] = tempSwap; } } private static function calculate(plaintxt:Array, psw:Array):Array { initialize(psw); var i:Number = 0; var j:Number = 0; var cipher:Array = new Array(); var k:Number, temp:Number, cipherby:Number; for (var a:Number = 0; a> 4] + hexes[chars[i] & 0xf]; } return result; } private static function hexToChars(hex:String):Array { var codes:Array = new Array(); for (var i:Number = (hex.substr(0, 2) == "0x") ? 2 : 0; i