Base64算法理解

Base64是加密算法吗?

因为Base64算法是可逆的,所以不能算是加密算法,而算是一种编码方式。是一种使用64个可打印字符来表示二进制数据的编码方式

作用

  • 转码
  • 向浏览器以字符串输出
  • 当url中有特殊字符时,可以利用Base64编码来进行转义
  • 对于图片,本身是二进制,而Base64可以表示任何的二进制数据,因此可以直接在图片的src下存放Base64编码后的图片内容,这样就可以直接展示图片,而无需去请求对应url路径的图片,减少网络开销
  • 语言文字底层通过二进制传输,此时也可以通过Base64编码来展示

算法原理

官方

把每3个8位字节转换为四个6位的字节(3*8 = 4*6 = 24),然后在每个6位的前面补两个0(不足6位的后面补0),组成四个8位的字节,再将每个字节的值和64位字符编码表的值进行替换,不足4个字节的,后面补=

64的由来

一般中文占两个字节,而最大的字符是3个字节,也就是24位(一个字节8位),而24=3*8=4*6,所以我们可以用4个6位来表示一个字符(为了兼容最大的字符,所以用3个字节来表示一个),而二进制6位数的最大值是111111=63,也就是64个字符,这就是Base64当中64的由来。

64个字符编码表

0-25是大写字母,26-51是小写字母,52到61是数字,62是+,63是/

计算过程
  1. 找到指定编码字符的字符编码表
  2. 找到编码表中对应字符的值,并将值转为二进制
  3. 对二进制数进行分组,每6位一组(不足6位的后面补0)
  4. 去Base64表中查找其对应的编码字符
  5. 编码表参照完成后,最后不足4字节的后面补=,编码结束

例如将GB2312编码中的字进行base64编码:

  1. 在gb2312编码表里(链接)寻找字,发现字的十六进制编码为C4E3,二进制为:1100010011100011
  2. 将数字每6个一组:110001 001110 001100,对应的十进制值就是49 14 12,参照base64编码表(链接),可知对应编码为:x O M
  3. 因为不足4字节(3字节),所以最后补一个=,所以最终结果为:xOM=

你可能感兴趣的:(Base64算法理解)