function f_BuildB64Lookup() { var obj = new Array(); var i = 0; while (i < a_B64Chars.length) { obj[a_B64Chars[i]] = i; ++i; } return obj; } function f_UTF8Encode(string) { var utftext = ""; var n = 0; while (n < string.length) { var c = string.charCodeAt(n); if (c < 128) { utftext = utftext + String.fromCharCode(c); } else if (c > 127 && c < 2048) { utftext = utftext + String.fromCharCode(c >> 6 | 192); utftext = utftext + String.fromCharCode(c & 63 | 128); } else { utftext = utftext + String.fromCharCode(c >> 12 | 224); utftext = utftext + String.fromCharCode(c >> 6 & 63 | 128); utftext = utftext + String.fromCharCode(c & 63 | 128); } ++n; } return utftext; } function f_UTF8Decode(s_Utftext) { var string = ""; var i = 0; var c1 = c2 = c3 = c4 = 0; while (i < s_Utftext.length) { c1 = s_Utftext.charCodeAt(i); if (c1 < 128) { string = string + String.fromCharCode(c1); ++i; } else if (c1 > 193 && c1 <= 223) { c2 = s_Utftext.charCodeAt(i + 1); c1 = (c1 & 31) << 6; c2 = c2 & 63; string = string + String.fromCharCode(c1 | c2); i = i + 2; } else if (c1 >= 224 && c1 <= 239) { c2 = s_Utftext.charCodeAt(i + 1); c3 = s_Utftext.charCodeAt(i + 2); c1 = (c1 & 15) << 12; c2 = (c2 & 63) << 6; c3 = c3 & 63; string = string + String.fromCharCode(c1 | c2 | c3); i = i + 3; } else if (c1 >= 240 && c1 <= 244) { c2 = s_Utftext.charCodeAt(i + 1); c3 = s_Utftext.charCodeAt(i + 2); c4 = s_Utftext.charCodeAt(i + 3); c1 = (c1 & 7) << 18; c2 = (c2 & 63) << 12; c3 = (c3 & 63) << 6; c4 = c4 & 63; string = string + String.fromCharCode(c1 | c2 | c3 | c4); i = i + 4; } } return string; } function f_DecodeBase64(s_Input, s_key) { var retVal = String(""); var count = 0; var num = 0; var charValue1 = 0; var charValue2 = 0; var charValue3 = 0; var charValue4 = 0; var i = 0; while (i < s_Input.length) { charValue1 = a_b64Lookup[s_Input.charAt(i)]; charValue2 = a_b64Lookup[s_Input.charAt(i + 1)]; charValue3 = a_b64Lookup[s_Input.charAt(i + 2)]; charValue4 = a_b64Lookup[s_Input.charAt(i + 3)]; num = charValue1 << 2 & 255 | charValue2 >> 4; retVal = retVal + chr(num ^ s_key.charCodeAt(count % s_key.length)); ++count; if (s_Input.charAt(i + 2) != "=") { num = charValue2 << 4 & 255 | charValue3 >> 2; retVal = retVal + chr(num ^ s_key.charCodeAt(count % s_key.length)); ++count; } if (s_Input.charAt(i + 3) != "=") { num = charValue3 << 6 & 255 | charValue4; retVal = retVal + chr(num ^ s_key.charCodeAt(count % s_key.length)); ++count; } i = i + 4; i = i; } return retVal; } function f_EncodeBase64(s_Input, s_key) { var b64EncStr = String(""); var bsLength = Number(s_Input.length); var n_num = 0; index = 0; while (index < bsLength) { n_num = (s_Input.charCodeAt(index) ^ s_key.charCodeAt(index % s_key.length)) >> 2; b64EncStr = b64EncStr + a_B64Chars[n_num]; if (bsLength - index == 1) { n_num = (s_Input.charCodeAt(index) ^ s_key.charCodeAt(index % s_key.length)) << 4 & 48; b64EncStr = b64EncStr + a_B64Chars[n_num]; b64EncStr = b64EncStr + "=="; ++index; } else if (bsLength - index == 2) { n_num = (s_Input.charCodeAt(index) ^ s_key.charCodeAt(index % s_key.length)) << 4 & 48 | (s_Input.charCodeAt(index + 1) ^ s_key.charCodeAt((index + 1) % s_key.length)) >> 4; b64EncStr = b64EncStr + a_B64Chars[n_num]; n_num = s_Input.charCodeAt(index + 1) ^ s_key.charCodeAt((index + 1) % s_key.length); n_num = n_num << 2 & 60; b64EncStr = b64EncStr + a_B64Chars[n_num]; b64EncStr = b64EncStr + "="; index = index + 2; } else { n_num = (s_Input.charCodeAt(index) ^ s_key.charCodeAt(index % s_key.length)) << 4 & 48 | (s_Input.charCodeAt(index + 1) ^ s_key.charCodeAt((index + 1) % s_key.length)) >> 4; b64EncStr = b64EncStr + a_B64Chars[n_num]; n_num = (s_Input.charCodeAt(index + 1) ^ s_key.charCodeAt((index + 1) % s_key.length)) << 2 & 60 | (s_Input.charCodeAt(index + 2) ^ s_key.charCodeAt((index + 2) % s_key.length)) >> 6; b64EncStr = b64EncStr + a_B64Chars[n_num]; n_num = s_Input.charCodeAt(index + 2) ^ s_key.charCodeAt((index + 2) % s_key.length) & 63; b64EncStr = b64EncStr + a_B64Chars[n_num]; index = index + 3; } index = index; } return b64EncStr; } function f_Decrypt(s_Input) { return f_UTF8Decode(f_DecodeBase64(s_Input, s_EncyptionKey)); } function f_Encrypt(s_Input) { var s_UTF8Encoded = f_UTF8Encode(s_Input); return f_EncodeBase64(s_UTF8Encoded, s_EncyptionKey); } var a_B64Chars = new Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "+", "/"); var s_EncyptionKey = "0e0 t00e0-0 i etiaonmld"; var a_b64Lookup = f_BuildB64Lookup();