Base64编码,首先我们应该搞清楚,为什么里面有个64的字样呢?其实是因为该编码使用64个明文来编码任意 的二进制文件,它里面只使用了A-Z,a-z,0-9,+,/这64个字符,有“略懂”的同学就会说了,里面还有“=”号啊,不错,不过等号不属于编码字符,而是填充字符。
还有就是,为什么发明这么个编码呢,其实这个编码的原理是很简单的,“破解”也很容易,电子邮件刚出来的 时候,只传递英文字符,这没有问题,但是后来,中国人,日本人都要发email,这样问题就来了,因为这些字符有可能会被邮件服务器或者网关当成命令处 理,故必须得有一种编码来对邮件进行加密,但是加密的目的是为了能够使得一些原始的服务器不出问题(新得牛叉服务器已经能处理这些乱七八糟得情况了,不过 因为已经形成了一套规范,所以邮件还是得经过Base64编码才能传递),这样加密必须得简单(那搞个取反,异或加密吧,:-),还是没解决根本问题 咯),加密简单,这样客户端程序加密解密也快,又要是明文Ascii编码,这样Base64就诞生了。当初设计人员主要是考虑了两个问题:
1、加密算法复杂程度和效率
2、如何处理传输
Base64基本都能满足,如果因为发一封邮件把CPU占到100%或者把内存给用完了,那就完全没必要了,编码之后只要普通人一眼看不出内容就行了。
下面谈谈Base64的编码原理,按照RFC2045的定义,The Base64 Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not be humanly readable.我之前在网上查Base64的资料时,发现了一个很好的网站,
base64编码在线转换器 :http://www.motobit.com/util/base64-decoder-encoder.asp, 大家对Base64感兴趣的话,可以去看看。Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前 面补两个0,形成8位一个字节的形式。6bit2进制能表示的最大数是2的6次方减一,刚好是64,这也是为什么是64个字符的原因,这样就需要一张映射表,表如下:
索引
|
对应字符
|
索引
|
对应字符
|
索引
|
对应字符
|
索引
|
对应字符
|
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
|
||
15
|
P
|
32
|
g
|
49
|
x
|
||
16
|
Q
|
33
|
h
|
50
|
y
|
编码原理:将3个字节转换成4个字节((3 X 8)=24=(4X6)),先读入3个字节,每读一个字节,左移8位,再右移四次,每次6位,这样就有4个字节了。
解码原理:将4个字节转换成3个字节,先读入4个6位(用或运算),每次左移6位,再右移3次,每次8位,这样就还原了。
Base64将3个字节转变为4个字节,因此,编码后的代码量(以字节为单 位,下同)约比编码前的代码量多了1/3。如果代码量正好是3的整数倍,那么恰好多了1/3。但如果不是呢?这个时候“=”终于派上用场啦,当代码量不是 3的整数倍时,代码量/3的余数自然就是2或者1。转换的时候,结果不够6位的用0来补上相应的位置,之后再在6位的前面补两个0。转换完空出的结果就用 就用“=”来补位,总之要保证最后编码出来得字节数是4的倍数。
原理也说了表也给了,大家可以编码了哈……
不仔细看的话我还真不懂Base64编码是什么东东,只是知道有这么一回事而已,学习了
@懿古今 哇 大佬