乐趣区

[基础算法]base64简介

base64 是一种用 64 个字符来表示任意二进制数据的方法。
base 64 编码可以将任意一组字节转换为较长的常见文本字符序列,从而可以合法地作为首部字段值。base 64 编码将用户输入或二进制数据,打包成一种安全格式,将其作为 HTTP 首部字段的值发送出去,而无须担心其中包含会破坏 HTTP 分析程序的冒号、换行符或二进制值。
官方文档地址:RFC3548
base 64 编码过程
base 64 编码将一个 8 位子节序列拆散为 6 位的片段,并为每个 6 位的片短分配一个字符,这个字符是 base 64 字母表中的 64 个字符之一。这 64 个字符中包括大小写字母、数字、+和/,同时还包括了特殊字符=。具体内容如下:

Value
Encoding
Value
Encoding
Value
Encoding
Value
Encoding

0
A
17
R
34
i
51
z

1
B
18
S
35
j
52
0

2
C
19
T
36
k
53
1

3
D
20
U
37
l
54
2

4
E
21
V
38
m
55
3

5
F
22
W
39
n
56
4

6
G
23
X
40
o
57
5

7
H
24
Y
41
p
58
6

8
I
25
Z
42
q
59
7

9
J
26
a
43
r
60
8

10
K
27
b
44
s
61
9

11
L
28
c
45
t
62
+

12
M
29
d
46
u
63
/

13
N
30
e
47
v

14
O
31
f
48
w
(pad) =

15
P
32
g
49
x

16
Q
33
h
50
y

以“Hello!”为例,他的 ASCII 对应关系如下:
{:width=”50%”}
可知 Hello! 的 Base64 编码结果为 SGVsbG8h,原始字符串长度为 6 个字符,编码后长度为 8 个字符,每 3 个原始字符经 Base64 编码成 4 个字符,编码前后长度比 4 /3,这个长度比很重要 – 比原始字符串长度短,则需要使用更大的编码字符集,这并不我们想要的;长度比越大,则需要传输越多的字符,传输时间越长。Base64 应用广泛的原因是在字符集大小与长度比之间取得一个较好的平衡,适用于各种场景。
Base64 编码是每 3 个原始字符编码成 4 个字符,如果原始字符串长度不能被 3 整除,需要使用 0 值来补充原始字符串:
{:width=”50%”}
标准 Base64 编码通常用 = 字符来替换最后的 A,即编码结果为 SGVsbG8hIQ==。因为 = 字符并不在 Base64 编码索引表中,其意义在于结束符号,在 Base64 解码时遇到 = 时即可知道一个 Base64 编码字符串结束。

退出移动版