Base64

2017-12-30|Categories: 计算机基础|

What

Base64是一种 基于64个可打印字符来表示二进制数据 的表示方法。

标准的Base64的64个可打印字符如下:

  • 00-25: A-Z
  • 26-51: a-z
  • 52-61: 0-9
  • 62: +
  • 63: /

0-63被称为 索引

根据应用场景的变化,会对标准Base64做改进,最后两个字符(加号、正斜线)会有所不同。例如,在针对URL改进的Base64中,加号被改为中横线- ,正斜线被改为下划线_

How

因为2^6=64 ,所以把 每6个二进制数(bit)分成一组,对应一个可打印字符,而需要编码的数据是以字节(byte)为单位,1 byte = 8 bits,于是用4个可打印字符表示3个字节的数据(4 x 6 / 8 = 3),也就是说,每3个字节编码一次,最终把所有编码后的字符按顺序连在一起。

如果数据总长度不能被3整除,会多出1个或2个字节,这时候需要添加二进制的0补足3字节,然后再编码,如果一组6个二进制数都是0,对应的可打印字符就是等号=

编码示例(数据长度 能 被3整除)

原始数据:Man is

第一次编码3个字节:Man

  • ASCII编号(十进制):77 97 110
  • 十进制转二进制:01001101 01100001 01101110
  • 每6个二进制数分成一组:010011 010110 000101 101110
  • 二进制转十进制(索引):19 22 5 46
  • Base64编码:T W F u

第二次编码3个字节:is (注意,is前面有一个空格)

  • ASCII编号(十进制):32 105 115
  • 十进制转二进制:00100000 01101001 01110011
  • 每6个二进制数分成一组:001000 000110 100101 110011
  • 二进制转十进制(索引):8 6 37 51
  • Base64编码:I G l z

因此,Man is 的Base64编码是TWFuIGlz

编码示例(数据长度 不能 被3整除)

示意图:

以上所有信息来自 https://zh.wikipedia.org/wiki/Base64

Leave A Comment