uniapp-base64加密解密(不会中文乱码)


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( "" );     }


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM