表单提交前加密,本文使用(BASE64)加密
1 /** 2 *BASE64 Encode and Decode By UTF-8 unicode 3 *可以和java的BASE64编码和解码互相转化 4 */ 5 (function(){ 6 var BASE64_MAPPING = [ 7 'A','B','C','D','E','F','G','H', 8 'I','J','K','L','M','N','O','P', 9 'Q','R','S','T','U','V','W','X', 10 'Y','Z','a','b','c','d','e','f', 11 'g','h','i','j','k','l','m','n', 12 'o','p','q','r','s','t','u','v', 13 'w','x','y','z','0','1','2','3', 14 '4','5','6','7','8','9','+','/' 15 ]; 16 17 /** 18 *ascii convert to binary 19 */ 20 var _toBinary = function(ascii){ 21 var binary = new Array(); 22 while(ascii > 0){ 23 var b = ascii%2; 24 ascii = Math.floor(ascii/2); 25 binary.push(b); 26 } 27 /* 28 var len = binary.length; 29 if(6-len > 0){ 30 for(var i = 6-len ; i > 0 ; --i){ 31 binary.push(0); 32 } 33 }*/ 34 binary.reverse(); 35 return binary; 36 }; 37 38 /** 39 *binary convert to decimal 40 */ 41 var _toDecimal = function(binary){ 42 var dec = 0; 43 var p = 0; 44 for(var i = binary.length-1 ; i >= 0 ; --i){ 45 var b = binary[i]; 46 if(b == 1){ 47 dec += Math.pow(2 , p); 48 } 49 ++p; 50 } 51 return dec; 52 }; 53 54 /** 55 *unicode convert to utf-8 56 */ 57 var _toUTF8Binary = function(c , binaryArray){ 58 var mustLen = (8-(c+1)) + ((c-1)*6); 59 var fatLen = binaryArray.length; 60 var diff = mustLen - fatLen; 61 while(--diff >= 0){ 62 binaryArray.unshift(0); 63 } 64 var binary = []; 65 var _c = c; 66 while(--_c >= 0){ 67 binary.push(1); 68 } 69 binary.push(0); 70 var i = 0 , len = 8 - (c+1); 71 for(; i < len ; ++i){ 72 binary.push(binaryArray[i]); 73 } 74 75 for(var j = 0 ; j < c-1 ; ++j){ 76 binary.push(1); 77 binary.push(0); 78 var sum = 6; 79 while(--sum >= 0){ 80 binary.push(binaryArray[i++]); 81 } 82 } 83 return binary; 84 }; 85 86 var __BASE64 = { 87 /** 88 *BASE64 Encode 89 */ 90 encoder:function(str){ 91 var base64_Index = []; 92 var binaryArray = []; 93 for(var i = 0 , len = str.length ; i < len ; ++i){ 94 var unicode = str.charCodeAt(i); 95 var _tmpBinary = _toBinary(unicode); 96 if(unicode < 0x80){ 97 var _tmpdiff = 8 - _tmpBinary.length; 98 while(--_tmpdiff >= 0){ 99 _tmpBinary.unshift(0); 100 } 101 binaryArray = binaryArray.concat(_tmpBinary); 102 }else if(unicode >= 0x80 && unicode <= 0x7FF){ 103 binaryArray = binaryArray.concat(_toUTF8Binary(2 , _tmpBinary)); 104 }else if(unicode >= 0x800 && unicode <= 0xFFFF){//UTF-8 3byte 105 binaryArray = binaryArray.concat(_toUTF8Binary(3 , _tmpBinary)); 106 }else if(unicode >= 0x10000 && unicode <= 0x1FFFFF){//UTF-8 4byte 107 binaryArray = binaryArray.concat(_toUTF8Binary(4 , _tmpBinary)); 108 }else if(unicode >= 0x200000 && unicode <= 0x3FFFFFF){//UTF-8 5byte 109 binaryArray = binaryArray.concat(_toUTF8Binary(5 , _tmpBinary)); 110 }else if(unicode >= 4000000 && unicode <= 0x7FFFFFFF){//UTF-8 6byte 111 binaryArray = binaryArray.concat(_toUTF8Binary(6 , _tmpBinary)); 112 } 113 } 114 115 var extra_Zero_Count = 0; 116 for(var i = 0 , len = binaryArray.length ; i < len ; i+=6){ 117 var diff = (i+6)-len; 118 if(diff == 2){ 119 extra_Zero_Count = 2; 120 }else if(diff == 4){ 121 extra_Zero_Count = 4; 122 } 123 //if(extra_Zero_Count > 0){ 124 // len += extra_Zero_Count+1; 125 //} 126 var _tmpExtra_Zero_Count = extra_Zero_Count; 127 while(--_tmpExtra_Zero_Count >= 0){ 128 binaryArray.push(0); 129 } 130 base64_Index.push(_toDecimal(binaryArray.slice(i , i+6))); 131 } 132 133 var base64 = ''; 134 for(var i = 0 , len = base64_Index.length ; i < len ; ++i){ 135 base64 += BASE64_MAPPING[base64_Index[i]]; 136 } 137 138 for(var i = 0 , len = extra_Zero_Count/2 ; i < len ; ++i){ 139 base64 += '='; 140 } 141 return base64; 142 }, 143 /** 144 *BASE64 Decode for UTF-8 145 */ 146 decoder : function(_base64Str){ 147 var _len = _base64Str.length; 148 var extra_Zero_Count = 0; 149 /** 150 *计算在进行BASE64编码的时候,补了几个0 151 */ 152 if(_base64Str.charAt(_len-1) == '='){ 153 //alert(_base64Str.charAt(_len-1)); 154 //alert(_base64Str.charAt(_len-2)); 155 if(_base64Str.charAt(_len-2) == '='){//两个等号说明补了4个0 156 extra_Zero_Count = 4; 157 _base64Str = _base64Str.substring(0 , _len-2); 158 }else{//一个等号说明补了2个0 159 extra_Zero_Count = 2; 160 _base64Str = _base64Str.substring(0 , _len - 1); 161 } 162 } 163 164 var binaryArray = []; 165 for(var i = 0 , len = _base64Str.length; i < len ; ++i){ 166 var c = _base64Str.charAt(i); 167 for(var j = 0 , size = BASE64_MAPPING.length ; j < size ; ++j){ 168 if(c == BASE64_MAPPING[j]){ 169 var _tmp = _toBinary(j); 170 /*不足6位的补0*/ 171 var _tmpLen = _tmp.length; 172 if(6-_tmpLen > 0){ 173 for(var k = 6-_tmpLen ; k > 0 ; --k){ 174 _tmp.unshift(0); 175 } 176 } 177 binaryArray = binaryArray.concat(_tmp); 178 break; 179 } 180 } 181 } 182 183 if(extra_Zero_Count > 0){ 184 binaryArray = binaryArray.slice(0 , binaryArray.length - extra_Zero_Count); 185 } 186 187 var unicode = []; 188 var unicodeBinary = []; 189 for(var i = 0 , len = binaryArray.length ; i < len ; ){ 190 if(binaryArray[i] == 0){ 191 unicode=unicode.concat(_toDecimal(binaryArray.slice(i,i+8))); 192 i += 8; 193 }else{ 194 var sum = 0; 195 while(i < len){ 196 if(binaryArray[i] == 1){ 197 ++sum; 198 }else{ 199 break; 200 } 201 ++i; 202 } 203 unicodeBinary = unicodeBinary.concat(binaryArray.slice(i+1 , i+8-sum)); 204 i += 8 - sum; 205 while(sum > 1){ 206 unicodeBinary = unicodeBinary.concat(binaryArray.slice(i+2 , i+8)); 207 i += 8; 208 --sum; 209 } 210 unicode = unicode.concat(_toDecimal(unicodeBinary)); 211 unicodeBinary = []; 212 } 213 } 214 return unicode; 215 } 216 }; 217 218 window.BASE64 = __BASE64; 219 })();