阅读 231

base64编码原理

简介

  • Base64是一种基于64个可打印字符来表示二进制数据的表示方法,可用于任意数据的底层二进制数据编码,以应用于只能传输ASCII字符的场合。不过最常用于文本数据的处理传输。
  • 每6位为一个单元,对应某个可打印字符。3个字节相当于24位,对应于4个Base64单元,即3个字节可由4个可打印字符来表示。在Base64中的可打印字符包括字母A-Za-z、数字0-9/+这样共有64个字符。

base64.png Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据,包括MIME的电子邮件及XML的一些复杂数据。

原理

  • 在utf-8中,中文汉字每个占三个字节,每个字节是八位,所以一共就是24个位
  • base64则是一个汉字占四个字节,使用6个位长度保存,前面补两个0,所以base64编码后的大小会增加三分之一
  • 将一个汉字进行base64编码 -> 斐
  1. 将汉字通过Buffer转化为二进制(在node控制台中以16进制显示)
let bu = Buffer.from("斐");
console.log(bu); // <Buffer e6 96 90>
// 3个16进制数表示3个字节,分别转化为二进制
console.log(0xe6.toString(2));// 11100110
console.log(0x96.toString(2));// 10010110
console.log(0x90.toString(2));// 10010000
// 拼接三个字节的二进制 111001101001011010010000
复制代码
  1. 将得到的二进制每六位进行分隔,并在前面补0凑够8位

111001101001011010010000 => 00111001 00101001 00011010 00010000 3. 根据新的四位二进制得到新的四位十进制数,由于前两位为0,所以十进制数取值范围为2^6=>[0,63]

console.log(0b00111001.toString(10));// 57
console.log(0b00101001.toString(10));// 41
console.log(0b00011010.toString(10));// 26
console.log(0b00010000.toString(10));// 16
复制代码
  1. 根据上面的base64对照表替换为字符

57 41 26 16 => 5 p a Q 所以的base64编码为5paQ

文章分类
前端
文章标签