背景

在计算机中任何数据都是按 ascii 码存储的,而 ascii 码的 128-255 都是不可见字符,而在网络上交换数据时,由于不同设备对字符的处理方式有一些不同,这样那些不可见字符就有可能被错误处理。这是不利于传输的,所以就先把数据做一个 base64编码,统统变成可见字符,这样就大大降低了出错的可能性。

作用

将字符统统转换成可见字符。

原理

在计算机中数据都是比特流,也就是一个一个二进制,一个字节8个bit,而base64每次取6个重新拼接,获取到下标后,从base64字符中找到对应的字符,然后拼接起来完成一次编码。

特点

  • base64 只有64个字符(英文大小写、数字和 + 、/)以及用做后缀等号。
  • base64 将 3 个字节变成 4 个可打印字符,所以base64 编码后的字符串一定能被4整除(不算用做后缀的等号)
  • 等号一定用做后缀,且数目yi一定是0个,1个或2个。这是因为如果原文不能被 3 整除,base64 要在后面添加\0凑齐3n位。为了正确还原,添加了几个\0就加上几个等号。
  • 严格来说base64不能算是一种加密,只能说是编码转换。是为了方便把含有不可见字符串的信息用可见字符串表示出来,以便复制粘贴;

    编码原理(代码)

    ```javascript let buf = Buffer.from(‘惊’); console.log(buf);//e6 83 8a console.log(buf.toString(‘base64’));//5oOK

//自己实现base64转换。 let str = ‘abcdefghijklmnopqrstuvwxyz’.toLocaleUpperCase(); str += ‘abcdefghijklmnopqrstuvwxyz’; str += ‘0123456789+/‘;

//e6 -> 11100110 //83 -> 10000011 //8a -> 10001010

// 即 11100110 10000011 10001010 // 按6位重新分组后得 111001 101000 001110 001010

// 111001 -> 57 // 101000 -> // 001110 -> // 001010 ->

console.log(parseInt(‘111001’, 2)); //57 console.log(parseInt(‘101000’, 2)); //40 console.log(parseInt(‘001110’, 2)); //14 console.log(parseInt(‘001010’, 2)); //10

let base64 = str[57] + str[40] + str[14] + str[10]; console.log(base64);//5oOK 与之前得出得答案一致 ```