Base64编码

一. Base64编码由来

  为什么会有Base64编码呢?因为有些网络传送渠道并不支持所有的字节,例如传统的邮件只支持可见字符的传送,像ASCII码的控制字符就 不能通过邮件传送。这样用途就受到了很大的限制,比如图片二进制流的每个字节不可能全部是可见字符,所以就传送不了。最好的方法就是在不改变传统协议的情 况下,做一种扩展方案来支持二进制文件的传送。把不可打印的字符也能用可打印字符来表示,问题就解决了。Base64编码应运而生,Base64就是一种 基于64个可打印字符来表示二进制数据的表示方法。

二、Base64编码过程

  Base64编码要求把3个8位字节(3*8=24)转化为4个6位的字节(4*6=24),之后在6位的前面补两个0,形成8位一个字节的形式。 如果剩下的字符不足3个字节,则用0填充,输出字符使用'=',因此编码后输出的文本末尾可能会出现1或2个'='。

  为了保证所输出的编码位可读字符,Base64制定了一个编码表,以便进行统一转换。编码表的大小为2^6=64,这也是Base64名称的由来。

Base64编码表

码值  字符   码值   字符   码值   字符  码值   字符
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     /

三、java中进行BASE64 编码和解码

// 将 BASE64 编码的字符串 s 进行解码
public static String getFromBASE64(String s) {
if (s == null) return null;
BASE64Decoder decoder = new BASE64Decoder();
try {
byte[] b = decoder.decodeBuffer(s);
return new String(b);
} catch (Exception e) {
return null;
}
} 

 

posted @ 2015-10-22 14:36  好人难寻  阅读(152)  评论(1)    收藏  举报