package com.core
{
import mx.flash.UIMovieClip;
public class As2RC4
{
static public var sbox:Array = new Array(255);
static public var mykey:Array = new Array(255);
public function As2RC4()
{
}
static public function initialize(pwd:Array) : void
{
var _loc2:uint = 0;
var _loc3:uint;
var nLength:uint = pwd.length;
for (var i:uint = 0; i <= 255; ++i)
{
mykey[i] = pwd[i % nLength];
sbox[i] = i;
} // end of for
for (var j:uint = 0; j <= 255; ++j)
{
_loc2 = (_loc2 + sbox[j] + mykey[j]) % 256;
_loc3 = sbox[j];
sbox[j] = sbox[_loc2];
sbox[_loc2] = _loc3;
} // end of for
} // End of the public function
static public function encrypt(src:String, key:String) :String
{
var _loc3:Array = strToChars(src);
var _loc1:Array = strToChars(key);
var _loc2:Array = calculate(_loc3, _loc1);
return charsToHex(_loc2);
}
static public function decrypt(src:String, key:String) : String
{
var _loc3:Array = hexToChars(src);
var _loc1:Array = strToChars(key);
var _loc2:Array = calculate(_loc3, _loc1);
return charsToStr(_loc2);
}
static public function calculate(plaintxt:Array, psw:Array) : Array
{
initialize(psw);
var _loc1:uint = 0;
var _loc2:uint = 0;
var _loc9:Array = new Array();
var _loc7:uint;
var _loc5:uint;
var _loc6:Object;
for (var i:uint = 0; i < plaintxt.length; ++i)
{
_loc1 = (_loc1 + 1) % 256;
_loc2 = (_loc2 + sbox[_loc1]) % 256;
_loc5 = sbox[_loc1];
sbox[_loc1] = sbox[_loc2];
sbox[_loc2] = _loc5;
var _loc4:uint = ( sbox[_loc1] + sbox[_loc2]) % 256;
_loc7 = sbox[_loc4];
_loc6 = plaintxt[i] ^ _loc7;
_loc9.push(_loc6);
} // end of for
return (_loc9);
}
/**
*
*/
static public function charsToHex(chars:Array ) : String
{
var hex:String = new String("");
var _loc3:Array = new Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f");
for (var i:uint = 0; i < chars.length; ++i)
{
hex = hex + (_loc3[chars[i] >> 4] + _loc3[chars[i] & 15]);
} // end of for
return (hex);
}
static public function hexToChars(hex:String) : Array
{
var chars:Array = new Array();
for (var i:uint = hex.substr(0, 2) == "0x" ? (2) : (0); i < hex.length; i = i + 2)
{
chars.push(parseInt(hex.substr(i, 2), 16));
}
return chars;
}
static public function charsToStr(chars : Array) : String
{
var str:String = new String("");
for (var i:uint = 0; i < chars.length; ++i)
{
str = str + String.fromCharCode(chars[i]);
}
return str;
}
static public function strToChars(str:String) : Array
{
var chars:Array = new Array();
for (var i:uint = 0; i < str.length; ++i)
{
chars.push(str.charCodeAt(i));
}
return chars;
}
}
}
댓글 없음:
댓글 쓰기