二
28
定义
Base64是用64个可见字符表示任意字节编码方式。
Base64在RFC2045的section 6.8(The Base64 Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not be humanly readable)定义:Base64内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式。
Base64编码应用:电子邮件编码传输、广告点击跳转加密编码串、Cookie串二进制内容编码。
编码范围
一个字节的编码范围是[0x00, 0xff],共8个位,256个字符(可称为一个八位组或Base256)。
Base64的编码范围是[0x00, 0x3f],共6个位,64个字符(也为一个六位组)。
Base64的编码过程就是把八位组变成六位组的过程,每三个8bit的字节转换为四个6bit的字节(3*8 = 4*6 = 24),然后把6bit再添两位高位0,组成四个8bit的字节。也就是说,转换后的字符串理论上要比原来的长1/3(3字节编码成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。第62,63,pad字符可以根据使用场合来自定义。譬如在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 11000101,16进制(Base16)表示就是:D5C5。编码成Base64,需要使用填充字符补齐成3字节再编码,编码结果是1iU=
|
转换前bit内容
|
11010101
|
11000101
|
pad
|
|
|
转换后bit内容
|
00110101
|
00011100
|
00010100
|
=
|
|
转换后字符
|
1(53)
|
i(34)
|
U(20)
|
=
|
编码过程
第一个字符通过右移2位获得第一个目标字符的Base64表位置,根据这个数值取到表上相应的字符,就是第一个目标字符。
然后将第一个字符左移4 位加上第二个字符右移4位,即获得第二个目标字符。
再将第二个字符左移2位加上第三个字符右移6位,获得第三个目标字符。
最后取第三个字符的右6位即获得第四个目标字符。
在以上的每一个步骤之后,再把结果与 0x3f 进行 AND 位操作,就可以得到编码后的字符了。
如果原文字节数不是3的倍数,补齐尾部不足的字节使用填充字符。
转载本站文章请注明,转载自:神秘果
本文链接: http://www.shenmiguo.com/archives/2010/326_base64-encode.html

十二月 23rd, 2011 at 19:57
Stands back from the keyboard in amamzeent! Thanks!
十二月 24th, 2011 at 16:17
mIsG9S kkydwyipkind
十二月 25th, 2011 at 01:01
OW0fPo , [url=http://jtuzzyzjvhpp.com/]jtuzzyzjvhpp[/url], [link=http://xqunevmycrfn.com/]xqunevmycrfn[/link], http://dgghmpqrhtyb.com/
十二月 25th, 2011 at 17:39
TghrFh mwnjliedobcf
十二月 25th, 2011 at 23:05
DiXlW1 , [url=http://qcwuuonxnpxn.com/]qcwuuonxnpxn[/url], [link=http://hzvcdepgiayd.com/]hzvcdepgiayd[/link], http://iqfboqokwkse.com/