表单提交前加密,本文使用(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 })();
BASE64.js

相关文章:

  • 2021-12-08
猜你喜欢
  • 2021-06-20
  • 2021-12-10
  • 2021-12-09
相关资源
相似解决方案