Base64编码

来源:互联网 发布:赵薇万惠事件知乎 编辑:程序博客网 时间:2024/05/19 13:44

Base64

是一种很常用的编码方式,利用它可以将任何二进制的字符编码到可打印的64个字符之中,这样,不管是图片,中文文本等都可以编码成只有ASCII的纯文本。至于为

什么要进行这个转换呢,最初主要使用在EMail领域,早期的一些邮件网关只识别ASCII,如果发现邮件里有其他字符,就会将它们过滤掉,这样中文的邮件,有图片附件的邮件在这些网关上就会发生问题,于是将中文和图片都使用base64编码然后传输,接受后再解码就客服了这个问题了。

Base64

除了可以使用在相似场合,还可以用作简单的加密等等。下面

介绍下

Base64的方法:

首先是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

所有的字符就

'A'~'Z','a'~'z','0'~'9','+','/'共64个,以及末尾的填充字符'='  编码的方法是:从输入缓冲中依次取出字符,第一个字符的,从最高位开始取出6个bit,这6个bit的值的范围在0~63,将这个值作为索引,对应上面的表格,找到相应的字符,这便是第一个Base64后的字符,然后将第一个字符的低2位与第二个字符的高4位组成6个bit, 同样查表得到第二个Base64字符,以此类推,从左向右没凑足6个bit就转换成一个Base64字符,由于输入缓冲中每3个字符包含24个bit,这24个bit正好可以转成4个Base64字符,所以没3个字符能组成一个转换循环,如 果输入缓冲中字符的个数是3 的整数倍,那么结果就是4的整数倍,两者的长度是3:4的关系,但是如果输入字符不是3的整数倍呢?这就涉及到了末尾填充问题。

 输入缓冲的末尾可能余下一个字符,或两个字符:SXS好问提示,如果余下一个字符,前6个bit转换成Base64,剩下的低2位要右边补0 ,凑成6bit,然后转换成Base64,为了让解析者了解这个情况,在输出缓冲的最后要补上两个'='。如果余下两个字符,同样转换出两个Base64 字符后,在剩下的4个bit右边补0,凑成6bit,然后转换成

Base64,同样在输出缓冲的末尾要补上一个'=' 。

 由此可见

Base64 后的字符串,长度一定是4的整数倍,末尾有一个,两个或没有'='。

要注意的是为了兼容有些邮件服务器,Base64后的字符串经常要插入来确保每一行不超过76个字符,解析时要跳过它们。好了,原理就是这样的,是不是很简单,就是取3个成4个,好了,上代码:

原创粉丝点击