欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

base64原理及其实现

程序员文章站 2022-03-30 21:12:54
...

base64原理

*base是吧3个8位字节转成4个6位字节,然后在6位字节前面补两个零
*6位字节是0~63都是可见字符


用Buffer将一个汉字转成16进制

var buf=new Buffer('珍');//e7 8f 8d

将16进制的转成10进制

//把任意字符转成10进制
console.log(parseInt("e7",16));//231
console.log(parseInt("8f",16));//143
console.log(parseInt("8d",16));//141

将10进制转成2进制

//10进制转成任意进制
console.log((231).toString(2));//11100111
console.log((143).toString(2));//10001111
console.log((141).toString(2));//10001101

按照base64的原理

11100111 10001111 10001101
变成
00111001  00111000  00111110  00001101

把二进制转成10进制

//把二进制转成10进制
console.log(parseInt("00111001",2));//57
console.log(parseInt("00111000",2));//56
console.log(parseInt("00111110",2));//62
console.log(parseInt("00001101",2));//13

base64

var str="ABCDEFGHIJKLMNOPQRSTUVWSYZ";
 str+=str.toLowerCase();
 str+='0123456789';
 str+='+/';

输出

 console.log(str[57],str[56],str[62],str[13]);//5 4 + N

base64原理及其实现


封装

function base64s(font) {
    var base = "ABCDEFGHIJKLMNOPQRSTUVWSYZ";
    base += base.toLowerCase();
    base += '0123456789';
    base += '+/';
    var result = [];
    var str = '';
    var buf = new Buffer(font);
    for(var i = 0; i < buf.length; i++) {
        str += buf[i].toString(2);
    }
    for(var j = 0; j < str.length / 6; j++) {
        result.push(str.slice(j * 6, (j + 1) * 6));
    }
    result.forEach(function(item, index) {
        result[index] = parseInt(item, 2);
    });
    return [base[result[0]], base[result[1]], base[result[2]], base[result[3]]].toString().replace(/,/g, " ");
}