Suggest a feature
×

Welcome to TagMyCode

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