Base64 编码解码 前端方法
2019-04-11 本文已影响0人
一只大橘
**Base64**是一种基于64个可打印字符来表示二进制数据的表示方法。由于2的6次方等于64,所以每6个[比特](http://zh.wikipedia.org/wiki/%E6%AF%94%E7%89%B9)为一个单元,对应某个可打印字符。三个[字节](http://zh.wikipedia.org/w/index.php?title=8%E4%BD%8D%E5%85%83%E7%BB%84&action=edit&redlink=1)有24个比特,对应于4个Base64单元,即3个字节需要用4个可打印字符来表示。它可用来作为电子邮件的传输编码。在Base64中的可打印字符包括字母A-Z、a-z、数字0-9 ,这样共有62个字符,此外两个可打印符号在不同的系统中而不同**(本类库里面用的是`+`,`/`这两个字符)**。一些如[uuencode](http://zh.wikipedia.org/wiki/Uuencode)的其他编码方法,和之后[binhex](http://zh.wikipedia.org/w/index.php?title=Binhex&action=edit&redlink=1)的版本使用不同的64字符集来代表6个二进制数字,但是它们不叫Base64。
Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据。包括MIME的email,email via MIME, 在XML中存储复杂数据.
base64解密操作
var base= newBase64();
this.checkpiccode=base.decode('value’);
base64加密操作
this._utf8_encode=base._utf8_encode('value’);
functionBase64() {
var_keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=“;
this.decode= function(input) {
varoutput=“”;
varchr1,chr2,chr3;
varenc1,enc2,enc3,enc4;
vari=0;
input=input.replace(/[^A-Za-z0-9\+\/\=]/g,””);
while(i
enc1=_keyStr.indexOf(input.charAt(i++));
enc2=_keyStr.indexOf(input.charAt(i++));
enc3=_keyStr.indexOf(input.charAt(i++));
enc4=_keyStr.indexOf(input.charAt(i++));
chr1=(enc1<<2)|(enc2>>4);
chr2=((enc2&15)<<4)|(enc3>>2);
chr3=((enc3&3)<<6)|enc4;
output=output+String.fromCharCode(chr1);
if(enc3!=64) {
output=output+String.fromCharCode(chr2);
}
if(enc4!=64) {
output=output+String.fromCharCode(chr3);
}
}
output= this._utf8_decode(output);
returnoutput;
}
//加密方法
this._utf8_encode = function (string) {string=string.replace(/\r\n/g,"\n");varutftext ="";for(varn =0; n
utftext+=String.fromCharCode(c);
}elseif((c >127) && (c <2048)) {
utftext+= String.fromCharCode((c >>6) |192);
utftext+= String.fromCharCode((c &63) |128);
}else{
utftext+= String.fromCharCode((c >>12) |224);
utftext+= String.fromCharCode(((c >>6) &63) |128);
utftext+= String.fromCharCode((c &63) |128);
}
}returnutftext;
}
this._utf8_decode= function(utftext) {
varstring=“”;
vari=0;
varc=0
varc1=0;
varc2=0;
while(i
c=utftext.charCodeAt(i);
if(c<128) {
string+=String.fromCharCode(c);
i++;
}else if((c>191)&&(c<224)) {
c2=utftext.charCodeAt(i+1);
string+=String.fromCharCode(((c&31)<<6)|(c2&63));
i+=2;
}else{
c2=utftext.charCodeAt(i+1);
c3=utftext.charCodeAt(i+2);
string+=String.fromCharCode(((c&15)<<12)|((c2&63)<<6)|(c3&63));
i+=3;
}
}
returnstring;
}
}
欢迎转载,不是本人原创,也是网上分享找到的资料