前端 - base64原理浅析

  1. 什么是Base64编码
    Base64 就是指64个字符,包括大小写字母[A-Z、a-z],阿拉伯数字[0-9],还有两个字符[+、/],两外还有一个表示后缀的字符 [ = ],Base64就是指只能传输这64个字符

  2. Base64编码原理
    先提一下ASCII码, ASCII码的范围是0-127,其中0-31和127是控制字符,共33个。其余95个,即32-126是可打印字符,包括数字、大小写字母、常用符号等。Base64 就是将 ASCII码 用 Base64位字符表示
    Base64位只需要6个字符即可表示,而 ASCII码 需要8个字符位,这就是常说的,Base64编码利用6bit字符来表达 ASCII码 8bit字符

  3. 使用Base64编码的优缺点

    1. 编码之后的字符串可以直接内联到HTML中显示,比如,我们一些体积比较小的图片,就可以转换成 Base64编码,直接插入到图片的 src 路径中
    2. 采用 Base64编码之后,数据体积通常是原数据的体积4/3
  4. Base64编码原理具体解析

    1. 首先,6bit显然不够容纳8bit的数据。6和8的最小公倍数是24,所以我们用4个Base64字符刚好能够表示三个传统的8bit字符。如下所示,字符串Man的编码图解如下
      前端 - base64原理浅析Man的编码结果为TWFu,显然,Base64编码会多1/3的长度,这也解释了文中开头的疑问,为什么Base64编码后的体积会大1/3。
      Man这个字符串的长度刚好是3,我们能用4个Base64来表示。如果待编码的字符串长度不是三的倍数时应该怎么处理呢?
      这是需要做一个特殊处理,假设待编码字符串长度为10。这前9个字符可以用12个Base64字符表示。第10个字符的前6bit作为一个Base64字符,剩下的2bit后面需要先补0,补到6位(此处补4个0)作为第二个Base64字符,至于第三个和第四个Base64字符,虽然没有相对应的内容,我们仍需以=填充。
      如下图所示,A对应的Base64编码为QQ==,BC对应的Base64编码为QkM=

    前端 - base64原理浅析2 . 解码的过程比较简单。去掉末尾的等号=。剩下的Base64字符,每8bit组成一个8bit字节,最后剩余不足8位的丢弃即可

参考链接:
https://mp.weixin.qq.com/s/Pvq_zDKePlkW8SW4RT2xGg