Base64原理简介

Base64是一种编码方式,通常用于将二进制数据转换成可见字符的形式,该过程可逆。
过程大致如下:
1. 对64个可见字符,进行一个索引编码。索引是二进制的值,对应找到一个可见字符。
Base64 编码表
ValueChar
 
ValueChar
 
ValueChar
 
ValueChar
0 A 16 Q 32 g 48 w
1 B 17 R 33 h 49 x
2 C 18 S 34 i 50 y
3 D 19 T 35 j 51 z
4 E 20 U 36 k 52 0
5 F 21 V 37 l 53 1
6 G 22 W 38 m 54 2
7 H 23 X 39 n 55 3
8 I 24 Y 40 o 56 4
9 J 25 Z 41 p 57 5
10 K 26 a 42 q 58 6
11 L 27 b 43 r 59 7
12 M 28 c 44 s 60 8
13 N 29 d 45 t 61 9
14 O 30 e 46 u 62 +
15 P 31 f 47 v 63 /
2.上面的表说明只要6位,就可以表示0-63的范围。
Base64先将每个字节转成二进制形式,每6位取值,将得到的值作为索引,到1.的表中索引到对应的可见字符。
而一个字节是8位,于是,就有2位多余了。多余了怎么办呢,与下一个字节拼接。
很明显,每3个字节,就可以编码成4个0-63的数字,对应4个字符。
 
用代码说话。
1 public static void main(String[] args) {
2         byte[] bytes = new byte[] { 1, 2, 3 };
3         System.out.println(new String(Base64.encodeBase64(bytes)));
4     }

我们来分析一下。

这个byte数组的二进制数据如下:

00000001  00000010  00000011

000000  010000  001000  000011

0      16      8     3

A      Q      I      D

因此,结果就是AQID。

 

注意两点:

1)并不能保证每个数组个数都是3的倍数,因此,对于未能补成二进制位的,在后面补0,如下图A
2)原则上,Base64是最小4个字符一组,对于不足的字符,用=填充,如下图A, BC
 
posted @ 2015-11-22 18:38  kingsleylam  阅读(519)  评论(0编辑  收藏  举报