小程序中封装base64

  1 function Base64() {
  2 
  3   // private property  
  4   var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
  5 
  6   // public method for encoding  
  7   this.encode = function (input) {
  8     var output = "";
  9     var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
 10     var i = 0;
 11     input = _utf8_encode(input);
 12     while (i < input.length) {
 13       chr1 = input.charCodeAt(i++);
 14       chr2 = input.charCodeAt(i++);
 15       chr3 = input.charCodeAt(i++);
 16       enc1 = chr1 >> 2;
 17       enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
 18       enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
 19       enc4 = chr3 & 63;
 20       if (isNaN(chr2)) {
 21         enc3 = enc4 = 64;
 22       } else if (isNaN(chr3)) {
 23         enc4 = 64;
 24       }
 25       output = output +
 26         _keyStr.charAt(enc1) + _keyStr.charAt(enc2) +
 27         _keyStr.charAt(enc3) + _keyStr.charAt(enc4);
 28     }
 29     return output;
 30   }
 31 
 32   // public method for decoding  
 33   this.decode = function (input) {
 34     var output = "";
 35     var chr1, chr2, chr3;
 36     var enc1, enc2, enc3, enc4;
 37     var i = 0;
 38     input = input.replace(/[^A-Za-z0-9+/=]/g, "");
 39     while (i < input.length) {
 40       enc1 = _keyStr.indexOf(input.charAt(i++));
 41       enc2 = _keyStr.indexOf(input.charAt(i++));
 42       enc3 = _keyStr.indexOf(input.charAt(i++));
 43       enc4 = _keyStr.indexOf(input.charAt(i++));
 44       chr1 = (enc1 << 2) | (enc2 >> 4);
 45       chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
 46       chr3 = ((enc3 & 3) << 6) | enc4;
 47       output = output + String.fromCharCode(chr1);
 48       if (enc3 != 64) {
 49         output = output + String.fromCharCode(chr2);
 50       }
 51       if (enc4 != 64) {
 52         output = output + String.fromCharCode(chr3);
 53       }
 54     }
 55     output = _utf8_decode(output);
 56     return output;
 57   }
 58 
 59   // private method for UTF-8 encoding  
 60   var _utf8_encode = function (string) {
 61     string = string.replace(/
/g, "
");
 62     var utftext = "";
 63     for (var n = 0; n < string.length; n++) {
 64       var c = string.charCodeAt(n);
 65       if (c < 128) {
 66         utftext += String.fromCharCode(c);
 67       } else if ((c > 127) && (c < 2048)) {
 68         utftext += String.fromCharCode((c >> 6) | 192);
 69         utftext += String.fromCharCode((c & 63) | 128);
 70       } else {
 71         utftext += String.fromCharCode((c >> 12) | 224);
 72         utftext += String.fromCharCode(((c >> 6) & 63) | 128);
 73         utftext += String.fromCharCode((c & 63) | 128);
 74       }
 75 
 76     }
 77     return utftext;
 78   }
 79 
 80   // private method for UTF-8 decoding  
 81   var _utf8_decode = function (utftext) {
 82     var string = "";
 83     var i = 0;
 84     var c = c1 = c2 = 0;
 85     while (i < utftext.length) {
 86       c = utftext.charCodeAt(i);
 87       if (c < 128) {
 88         string += String.fromCharCode(c);
 89         i++;
 90       } else if ((c > 191) && (c < 224)) {
 91         c2 = utftext.charCodeAt(i + 1);
 92         string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
 93         i += 2;
 94       } else {
 95         c2 = utftext.charCodeAt(i + 1);
 96         c3 = utftext.charCodeAt(i + 2);
 97         string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
 98         i += 3;
 99       }
100     }
101     return string;
102   }
103 }
104 
105 
106 var base = new Base64();
107 
108 function encode(str){
109   return base.encode(str);
110 }
111 function decode(str) {
112   return base.decode(str);
113 }
114 function safeEncode(str) {
115   return encode(str).replace(/[+=/]/g, function (c) {
116     switch (c) {
117       case '+': return '.';
118       case '=': return '-';
119       case '/': return '_';
120     }
121   })
122 }
123 
124 
125 export {
126   encode,
127   decode,
128   safeEncode
129 }
原文地址:https://www.cnblogs.com/linsx/p/9255870.html