定义

Base6464个可见字符表示任意字节编码方式。
Base64RFC2045section 6.8The Base64 Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not be humanly readable)定义:Base64内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式。
相对于Base64,还有Base16Base32编码方式,可以参见RFC3548The Base16, Base32, and Base64 Data Encodings)。
Base64编码应用:电子邮件编码传输、广告点击跳转加密编码串、Cookie串二进制内容编码。
 
编码范围
一个字节的编码范围是[0x00, 0xff],共8个位,256个字符(可称为一个八位组或Base256)。
Base64的编码范围是[0x00, 0x3f],共6个位,64个字符(也为一个六位组)。
Base64的编码过程就是把八位组变成六位组的过程,每三个8bit的字节转换为四个6bit的字节(3*8 = 4*6 = 24),然后把6bit再添两位高位0,组成四个8bit的字节。也就是说,转换后的字符串理论上要比原来的长1/33字节编码成4字节)。
Base64使用的映射字符:
编码
字符
编码
字符
编码
字符
编码
字符
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
 
 
pad是填充字符,当转换字节不是3的倍数时,就用pad字符填充补齐。填充字符数=转换字节数 MOD 3。第6263pad字符可以根据使用场合来自定义。譬如在URL串里,=表示特殊意义,就不能使用=作为填充字符。
 
编码举例
如果字节串是3的倍数,刚好对齐。下面是3字节编码成4字节:
转换前bit内容
12345678
12345678
12345678
 
转换后bit内容
00123456
00781234
00567812
00345678
如果字节串不是3的位数,不足的bit用0填充,不足的字节使用填充字符。下面是2字节编码成4字节:
转换前bit内容
12345678
12345678
pad
 
转换后bit内容
00123456
00781234
00567800
=
如:“张”占用2个字节,字节内容是:11010101 1100010116进制(Base16)表示就是:D5C5。编码成Base64,需要使用填充字符补齐成3字节再编码,编码结果是1iU=
转换前bit内容
11010101
11000101
pad
 
转换后bit内容
00110101
00011100
00010100
=
转换后字符
153
i34
U20
=
 
编码过程
第一个字符通过右移2位获得第一个目标字符的Base64表位置,根据这个数值取到表上相应的字符,就是第一个目标字符。
然后将第一个字符左移4 位加上第二个字符右移4位,即获得第二个目标字符。
再将第二个字符左移2位加上第三个字符右移6位,获得第三个目标字符。
最后取第三个字符的右6位即获得第四个目标字符。
在以上的每一个步骤之后,再把结果与 0×3f 进行 AND 位操作,就可以得到编码后的字符了。
如果原文字节数不是3的倍数,补齐尾部不足的字节使用填充字符。

转载本站文章请注明,转载自:神秘果

本文链接: http://www.shenmiguo.com/archives/2010/326_base64-encode.html

Leave a Reply

You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <font color="" face="" size=""> <span style="">