github.com/jincm/wesharechain@v0.0.0-20210122032815-1537409ce26a/app/lib/base64.js (about)

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