javascript base64 function

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值