Base64 编码过程

176 阅读5分钟

背景

本文主要是研究一下文本编码为 Base64 以及解码的主要过程以及原理,简单知道一下其中的原理。

Base64 的基本介绍

以下的介绍摘抄自维基百科:

Base64(基底64)是一种基于 64 个可打印字符来表示二进制数据的表示方法。由于log2⁡64=6

,所以每 6 个比特为一个单元,对应某个可打印字符。3 个字节相当于24个比特,对应于4个Base64单元,即 3 个字节可由 4 个可打印字符来表示。在Base64中的可打印字符包括字母 A-Za-z数字 0-9,这样共有 62 个字符,此外两个可打印符号在不同的系统中而不同。一些如uuencode的其他编码方法,和之后 BinHex 的版本使用不同的 64 字符集来代表 6 个二进制数字,但是不被称为Base64。

从以上的介绍中我们得出以下的一些信息

1、首先是基于 64 个可打印的字符,这些字符包含了以下的内容,我这里直接搬运维基百科的索引表。

十进制二进制字符十进制二进制字符十进制二进制字符十进制二进制字符
0000000A16010000Q32100000g48110000w
1000001B17010001R33100001h49110001x
2000010C18010010S34100010i50110010y
3000011D19010011T35100011j51110011z
4000100E20010100U36100100k521101000
5000101F21010101V37100101l531101011
6000110G22010110W38100110m541101102
7000111H23010111X39100111n551101113
8001000I24011000Y40101000o561110004
9001001J25011001Z41101001p571110015
10001010K26011010a42101010q581110106
11001011L27011011b43101011r591110117
12001100M28011100c44101100s601111008
13001101N29011101d45101101t611111019
14001110O30011110e46101110u62111110+
15001111P31011111f47101111v63111111/
填充=

2、Base64 以 3 个字节为一个单元表示一个字符;

3、具有填充的行为,使用 = 进行填充,因为三个字节由 4 个可打印字符表示,如果不够的话就会用 = 进行填充。

实战转换

例如我们期望转换 ‘Hello World’ 这个字符串,过程如下:

首先需要将每一个字符转换成二进制,再对照索引表查看具体对应值。

# H e l l o  W o r l d
# 第一步:首先找到每个字母对应的 ASCII 码具体值
H 72 
e 101
l 108
l 108
o 111
space  32
W 87
o 111
r 114
l 108
d 100
# 第二步:将对应的 ASCII 值转换成 8 位的二进制值,如果其不是 8 位的需要再前面补上 0
# 对应二进制如下,当然不足 8 位的话需要之前补齐,补充 0 即可
01001000 01100101 01101100 01101100 01101111 00100000 01010111 01101111 01110010 01101100 01100100
# 第三步:切割数据,每 6 位做为一个单位,
010010 000110 010101 101100 011011 000110 111100 100000 010101 110110 111101 110010 011011 000110 010000
# 第四步:对照着索引表找到对应的值
010010 ——> S
000110 --> G
010101 --> V
101100 --> s
s01101 --> b
100011 --> G
011110 --> 8
010000 --> g
010101 --> V
110110 --> 2
111101 --> 9
011001 --> y
001101 --> b
100011 --> G
001000 --> Q
# 整体下来就是如下的字符串
SGVsbG8gV29ybGQ
# 但是还有一个比较重要的事情,这个字符串需要每四个算作一组,不够的话需要补齐,补齐的话就用=。
SGVs bG8g V29y bGQ=
# 最终结果如下
SGVs bG8g V29y bGQ=

在命令行中查看结果:

image.png

参考文档

维基百科Base64 zh.wikipedia.org/wiki/Base64

ASCII 码对照表 tool.oschina.net/commons?typ…

字符串转 Base64 www.lddgo.net/convert/str…

在线进制转换 tool.oschina.net/hexconvert