zoukankan      html  css  js  c++  java
  • Base64编解码 ---- 支持64编码

    1. 原生js的Base64方法

    encodeURIComponent() 函数可把字符串作为 URI 组件进行编码,有一个必传参数.

    unescape() 函数可对通过 escape() 编码的字符串进行解码。

    // base编码
    // value 是编码后的值
    // input 是需要编码的值
    function base64Encode(input){
      let value;
      value = encodeURIComponent(input);
      value = unescape(value);
      value = window.btoa(value);
      return value;
    }
    
    // base解码
    // value 是解码后的值
    // input 是需要解码的值
    function base64Decode(input){
      let value
      value = window.atob(input);
      value = escape(value);
      value = decodeURIComponent(value);
      return value;
    }
    

    JQuery 的 base64编码

    1、 下载 jquery.base64.js

    jQuery.base64 = ( function( $ ) {
    
      var _PADCHAR = "=",
        _ALPHA = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",
        _VERSION = "1.1";//Mr. Ruan fix to 1.1 to support asian char(utf8)
    
    
      function _getbyte64( s, i ) {
        // This is oddly fast, except on Chrome/V8.
        // Minimal or no improvement in performance by using a
        // object with properties mapping chars to value (eg. 'A': 0)
    
        var idx = _ALPHA.indexOf( s.charAt( i ) );
    
        if ( idx === -1 ) {
          throw "Cannot decode base64";
        }
    
        return idx;
      }
    
      function _decode_chars(y, x){
        while(y.length > 0){
          var ch = y[0];
          if(ch < 0x80) {
            y.shift();
            x.push(String.fromCharCode(ch));
          }else if((ch & 0x80) == 0xc0){
            if(y.length < 2) break;
            ch = y.shift();
            var ch1 = y.shift();
            x.push(String.fromCharCode( ((ch & 0x1f) << 6) + (ch1 & 0x3f)));
          }else{
            if(y.length < 3) break;
            ch = y.shift();
            var ch1 = y.shift();
            var ch2 = y.shift();
            x.push(String.fromCharCode(((ch & 0x0f) << 12) + ((ch1 & 0x3f) << 6) + (ch2 & 0x3f)));
          }
        }
      }
    
      function _decode( s ) {
        var pads = 0,
          i,
          b10,
          imax = s.length,
          x = [],
          y = [];
    
        s = String( s );
    
        if ( imax === 0 ) {
          return s;
        }
    
        if ( imax % 4 !== 0 ) {
          throw "Cannot decode base64";
        }
    
        if ( s.charAt( imax - 1 ) === _PADCHAR ) {
          pads = 1;
    
          if ( s.charAt( imax - 2 ) === _PADCHAR ) {
            pads = 2;
          }
    
          // either way, we want to ignore this last block
          imax -= 4;
        }
    
        for ( i = 0; i < imax; i += 4 ) {
          var ch1 = _getbyte64( s, i );
          var ch2 = _getbyte64( s, i + 1);
          var ch3 = _getbyte64( s, i + 2);
          var ch4 = _getbyte64( s, i + 3);
    
          b10 = ( _getbyte64( s, i ) << 18 ) | ( _getbyte64( s, i + 1 ) << 12 ) | ( _getbyte64( s, i + 2 ) << 6 ) | _getbyte64( s, i + 3 );
          y.push(b10 >> 16);
          y.push((b10 >> 8) & 0xff);
          y.push(b10 & 0xff);
          _decode_chars(y, x);
        }
        switch ( pads ) {
          case 1:
            b10 = ( _getbyte64( s, i ) << 18 ) | ( _getbyte64( s, i + 1 ) << 12 ) | ( _getbyte64( s, i + 2 ) << 6 );
            y.push(b10 >> 16);
            y.push((b10 >> 8) & 0xff);
            break;
    
          case 2:
            b10 = ( _getbyte64( s, i ) << 18) | ( _getbyte64( s, i + 1 ) << 12 );
            y.push(b10 >> 16);
            break;
        }
        _decode_chars(y, x);
        if(y.length > 0) throw "Cannot decode base64";
        return x.join( "" );
      }
    
    
      function _get_chars(ch, y){
        if(ch < 0x80) y.push(ch);
        else if(ch < 0x800){
          y.push(0xc0 + ((ch >> 6) & 0x1f));
          y.push(0x80 + (ch & 0x3f));
        }else{
          y.push(0xe0 + ((ch >> 12) & 0xf));
          y.push(0x80 + ((ch >> 6) & 0x3f));
          y.push(0x80 + (ch & 0x3f));
        }
      }
    
    
    
      function _encode( s ) {
        if ( arguments.length !== 1 ) {
          throw "SyntaxError: exactly one argument required";
        }
    
        s = String( s );
        if ( s.length === 0 ) {
          return s;
        }
    
        //s = _encode_utf8(s);
        var i,
          b10,
          y = [],
          x = [],
          len = s.length;
        i = 0;
        while(i < len){
          _get_chars(s.charCodeAt(i), y);
          while(y.length >= 3){
            var ch1 = y.shift();
            var ch2 = y.shift();
            var ch3 = y.shift();
            b10 = ( ch1 << 16 ) | ( ch2 << 8 ) | ch3;
            x.push( _ALPHA.charAt( b10 >> 18 ) );
            x.push( _ALPHA.charAt( ( b10 >> 12 ) & 0x3F ) );
            x.push( _ALPHA.charAt( ( b10 >> 6 ) & 0x3f ) );
            x.push( _ALPHA.charAt( b10 & 0x3f ) );
          }
          i++;
        }
    
    
        switch ( y.length ) {
          case 1:
            var ch = y.shift();
            b10 = ch << 16;
            x.push( _ALPHA.charAt( b10 >> 18 ) + _ALPHA.charAt( ( b10 >> 12 ) & 0x3F ) + _PADCHAR + _PADCHAR );
            break;
    
          case 2:
            var ch1 = y.shift();
            var ch2 = y.shift();
            b10 = ( ch1 << 16 ) | ( ch2 << 8 );
            x.push( _ALPHA.charAt( b10 >> 18 ) + _ALPHA.charAt( ( b10 >> 12 ) & 0x3F ) + _ALPHA.charAt( ( b10 >> 6 ) & 0x3f ) + _PADCHAR );
            break;
        }
    
        return x.join( "" );
      }
    
    
      return {
        decode: _decode,
        encode: _encode,
        VERSION: _VERSION
      };
    
    }( jQuery ) );
    
    

    2、 使用编码解码

    // 解码
    $.base64.decode('要解码的字符串')
    
    // 编码
    $.base64.encode('要编码的字符串')
    
  • 相关阅读:
    TCP源码—连接建立
    TCP系列02—连接管理—1、三次握手与四次挥手
    TCP系列01—概述及协议头格式
    ubuntu软件管理apt与dpkg
    318. Maximum Product of Word Lengths
    317. Shortest Distance from All Buildings
    316. Remove Duplicate Letters
    315. Count of Smaller Numbers After Self
    314. Binary Tree Vertical Order Traversal
    313. Super Ugly Number
  • 原文地址:https://www.cnblogs.com/serahuli/p/13264174.html
Copyright © 2011-2022 走看看