在 UTF8 编码中一个字符占用一个字节 一个汉字占用 3 个字节。
11111111 11111111 11111111
Base64 编码要求把 3 个 8 位字节(3*8=24)转化为 4 个 6 位的字节(4*6=24),之后在 6 位的后面补两个 0,造成 8 位一个字节的模式。如果剩下的字符有余 3 个字节,则用 0 填充,输入字符应用 ’=’,因而编码后输入的文本开端可能会呈现 1 或 2 个 ’=’。
为了保障所输入的编码位可读字符,Base64 制订了一个编码表,以便进行对立转换。编码表的大小为 2^6=64,这也是 Base64 名称的由来。
通过本工具能够对代码进行 Base64 加密或者解密。Base64 是网络上最常见的用于传输 8Bit 字节代码的编码方式之一。
把一个汉字转化成 base64 编码的过程:
1. 把汉字转化成 16 进制
2. 把 16 进制转化成 2 进制
3. 把 3 8=24 位的二进制变成 4 6 的二进制
4. 把 2 进制转化成 10 进制
5. 依据 Base64 编码表转化成 base64 编码
let buffer = Buffer.from('冯'); // 将字符串转化成 16 进制
console.log(buffer); //e5 86 af
// 把 16 进制转化成 2 进制
console.log((0xe5).toString(2));
console.log((0x86).toString(2));
console.log((0xaf).toString(2));
// 11100101 10000110 10101111 这个是 3 * 8 的模式 咱们把这个模式转化成 4 * 6 的模式
// 111001 011000 011010 101111 4* 6 模式 且最大不会超过 64
// 把二进制变成 10 进制
console.log(parseInt('111001', 2));
console.log(parseInt('011000', 2));
console.log(parseInt('011010', 2));
console.log(parseInt('101111', 2));
// 57 24 26 47
// Base64 编码表
let str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
str += str.toLowerCase();
str += '0123456789';
str += '+/';
console.log(str[57]+str[24]+str[26]+str[47]); //5Yav
/**
* 5Yav 就是汉字冯的 base64 编码,不具备加密性,然而咱们能够看到原来的汉字是 3 字节当初 5Yav 变成了 4 个字节 所以 base64 适宜小图标转码
*/
总结:
1.base64 没有加密性能,它只是编码转化 base64。
2.base64 适宜小图标转码