var DES = {
secode : function(opArray){
var _local2 = opArray;
var strEnd="=";
var _local3 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var bits;
var decOut = new Array ();
var _local1 = 0;
var j = 0;
_local1 = 0;
while (_local1 < _local2.length) {
//第一个元素(这里前提是单字节)向前移动2个字节,
//第二个移动1字节,第三个不移动
//那么 | 后的结果是,形成一个 3字节的数据如下
//xxxxxxxx0000000000000000
//00000000xxxxxxxx00000000
//0000000000000000xxxxxxxx
//注意bits是一个正整数,其值等与上面3组数 |(异) 后的数值
//16515072的二进制表示为:1111 1100, 0000 0000 ,0000 0000
//那么 bits & 16515072 后,就是取bits的前6位
//>>18 表示右移动 18为注意 bits & 16515072 后是正数,那么>>18时高位补的是00,
// 正数高位第一位为0,负数为1
//这样((bits & 16515072)>>18)的值就是其在_local3中对应字的符位置.
bits = ((_local2[_local1]<<16) | (_local2[_local1+1]<<8) | (_local2[_local1+2]));
decOut[j++] = _local3.charAt((bits & 16515072) >> 18);
decOut[j++] = _local3.charAt((bits & 258048) >> 12);
decOut[j++] = _local3.charAt((bits & 4032) >> 6);
decOut[j++] = _local3.charAt(bits & 63);
_local1 = _local1 + 3;
}
//另外258048其二进制表示为 11 ,1111 0000 ,0000 0000
// 等价于0000 0011 ,1111 0000 ,0000 0000 (正数高位为0)
//当字节数不是3的整数倍时,_local2[_local1+1],或_local2[_local1+2] 其值(下标已经超标)是0,
//也正好符合base64不足补零的定义
switch(_local2.length%3){
//多一个字节时映射成的4字接有2个字节里无数据(纯零)应此丢弃
//多2个字节时,丢弃一个,而正好是,末尾不加"=",故将strEnd="" 设置为空.
case 1:decOut.pop();decOut.pop();break;
case 2:decOut.pop();break;
case 0:strEnd="";break;
}
decOut.push(strEnd);
return (decOut.join(""));
},
encode : function(var1, key){
var _local3 = var1;
var2 = new Array();
var _local2 = 0;
var _local1 = 0;
while (_local1 < _local3.length) {
var2.push(_local3.charCodeAt(_local1) ^ key.charCodeAt(_local2++));
//当key序列不够长时循环使用
if (_local2 >= key.length) {
_local2 = 0;
}
_local1++;
}
var2=DES.secode(var2);
return (var2);
},
decode : function(var1, key){
var _local3 = var1;
_local3 = DES.becode(_local3);
var2 = "";
var _local2 = 0;
var _local1 = 0;
while (_local1 < _local3.length) {
var2 = var2.concat(String.fromCharCode(_local3[_local1] ^ key.charCodeAt(_local2++)));
if (_local2 >= key.length) {
_local2 = 0;
}
_local1++;
}
return (var2);
},
becode : function(opString){
var _local2 = opString;
var _local3 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var bits;
var decOut = new Array ();
var _local1 = 0;
var j = 0;
_local1 = 0;
while (_local1 < _local2.length) {
bits = ((((_local3.indexOf(_local2.charAt(_local1)) & 255) << 18) | ((_local3.indexOf(_local2.charAt(_local1 + 1)) & 255) << 12)) | ((_local3.indexOf(_local2.charAt(_local1 + 2)) & 255) << 6)) | (_local3.indexOf(_local2.charAt(_local1 + 3)) & 255);
decOut[j++] = (bits & 16711680) >> 16;
decOut[j++] = (bits & 65280) >> 8;
decOut[j++] = bits & 255;
_local1 = _local1 + 4;
}
if (_local2.charCodeAt(_local1 - 2) == 61) {
decOut.pop();
decOut.pop();
} else if (_local2.charCodeAt(_local1 - 1) == 61) {
decOut.pop();
//
}
return (decOut);
},
base64 : function(str){
var d=new Array();
for(var i=0;i<str.length;i++){
d.push(str.charCodeAt(i));
}
return DES.secode(d);
}
};
secode : function(opArray){
var _local2 = opArray;
var strEnd="=";
var _local3 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var bits;
var decOut = new Array ();
var _local1 = 0;
var j = 0;
_local1 = 0;
while (_local1 < _local2.length) {
//第一个元素(这里前提是单字节)向前移动2个字节,
//第二个移动1字节,第三个不移动
//那么 | 后的结果是,形成一个 3字节的数据如下
//xxxxxxxx0000000000000000
//00000000xxxxxxxx00000000
//0000000000000000xxxxxxxx
//注意bits是一个正整数,其值等与上面3组数 |(异) 后的数值
//16515072的二进制表示为:1111 1100, 0000 0000 ,0000 0000
//那么 bits & 16515072 后,就是取bits的前6位
//>>18 表示右移动 18为注意 bits & 16515072 后是正数,那么>>18时高位补的是00,
// 正数高位第一位为0,负数为1
//这样((bits & 16515072)>>18)的值就是其在_local3中对应字的符位置.
bits = ((_local2[_local1]<<16) | (_local2[_local1+1]<<8) | (_local2[_local1+2]));
decOut[j++] = _local3.charAt((bits & 16515072) >> 18);
decOut[j++] = _local3.charAt((bits & 258048) >> 12);
decOut[j++] = _local3.charAt((bits & 4032) >> 6);
decOut[j++] = _local3.charAt(bits & 63);
_local1 = _local1 + 3;
}
//另外258048其二进制表示为 11 ,1111 0000 ,0000 0000
// 等价于0000 0011 ,1111 0000 ,0000 0000 (正数高位为0)
//当字节数不是3的整数倍时,_local2[_local1+1],或_local2[_local1+2] 其值(下标已经超标)是0,
//也正好符合base64不足补零的定义
switch(_local2.length%3){
//多一个字节时映射成的4字接有2个字节里无数据(纯零)应此丢弃
//多2个字节时,丢弃一个,而正好是,末尾不加"=",故将strEnd="" 设置为空.
case 1:decOut.pop();decOut.pop();break;
case 2:decOut.pop();break;
case 0:strEnd="";break;
}
decOut.push(strEnd);
return (decOut.join(""));
},
encode : function(var1, key){
var _local3 = var1;
var2 = new Array();
var _local2 = 0;
var _local1 = 0;
while (_local1 < _local3.length) {
var2.push(_local3.charCodeAt(_local1) ^ key.charCodeAt(_local2++));
//当key序列不够长时循环使用
if (_local2 >= key.length) {
_local2 = 0;
}
_local1++;
}
var2=DES.secode(var2);
return (var2);
},
decode : function(var1, key){
var _local3 = var1;
_local3 = DES.becode(_local3);
var2 = "";
var _local2 = 0;
var _local1 = 0;
while (_local1 < _local3.length) {
var2 = var2.concat(String.fromCharCode(_local3[_local1] ^ key.charCodeAt(_local2++)));
if (_local2 >= key.length) {
_local2 = 0;
}
_local1++;
}
return (var2);
},
becode : function(opString){
var _local2 = opString;
var _local3 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var bits;
var decOut = new Array ();
var _local1 = 0;
var j = 0;
_local1 = 0;
while (_local1 < _local2.length) {
bits = ((((_local3.indexOf(_local2.charAt(_local1)) & 255) << 18) | ((_local3.indexOf(_local2.charAt(_local1 + 1)) & 255) << 12)) | ((_local3.indexOf(_local2.charAt(_local1 + 2)) & 255) << 6)) | (_local3.indexOf(_local2.charAt(_local1 + 3)) & 255);
decOut[j++] = (bits & 16711680) >> 16;
decOut[j++] = (bits & 65280) >> 8;
decOut[j++] = bits & 255;
_local1 = _local1 + 4;
}
if (_local2.charCodeAt(_local1 - 2) == 61) {
decOut.pop();
decOut.pop();
} else if (_local2.charCodeAt(_local1 - 1) == 61) {
decOut.pop();
//
}
return (decOut);
},
base64 : function(str){
var d=new Array();
for(var i=0;i<str.length;i++){
d.push(str.charCodeAt(i));
}
return DES.secode(d);
}
};