【Java】 Base64原理及简单应用

Base64是一种8位字节代码的编码方式,用于将字节码转换为可见字符的形式进行数据传递。在网络数据传递的时候,并不是所有的字节都可以在在网络中传递。比如对于图片中的二进制流中存在终止符就可能导致数据传输失败;文档数据中的不可见字符虽然可以使用ASCII码表编码表示,但是在邮件传输中是不能够传递不可见的控制字符的。

Base64就是为解决这类问题而产生的,将任意的字节码转化为64个可见字符,然后进行传递和解码。


对于如下的24bit数按照Base64转化为一个4字节数据:

0011  0010  1100  1101  0010  1001

24bit共三个字节数据,按每6位划分得到4组:

001100  101100  110100  101001

每6位前面补两个0得到4字节数据:

00001100  00101100  00110100  00101001

这样每个字节可表示范围为0-63,之后查询码表即可将任意的二进制流转化为可见字符

码表如下:

【Java】 Base64原理及简单应用_第1张图片

如下是一个简单的示例代码,使用java中的Base46编码生成一个随机Token

	public String getToken(){
		// 获取随机数,由于是随机的,所以长度不固定
		String random = System.currentTimeMillis() + new Random().nextInt() + "";
		try {
			MessageDigest md = MessageDigest.getInstance("md5");
			// 获取不定长随机数的摘要,为一个128位定长任意二进制串
			// 由于是任意的二进制位,因此在将该byte[] 转化为String的时候就可能会出现乱码或者在网络传输的时候产生错误
			byte token[] = md.digest(random.getBytes());
			// 使用前需要导包 sun.misc.BASE64Decoder.jar
			BASE64Encoder encoder = new BASE64Encoder();
			// 将摘要的128位进行Base64编码,以解决乱码
			return encoder.encode(token);
			
		} catch (NoSuchAlgorithmException e) {
			throw new RuntimeException(e);
		}
	}

生成结果如下:

U7rubDCfG/d1CXTrVY5YTQ==


参考链接:

http://www.cnblogs.com/hongru/archive/2012/01/14/2321397.html

http://www.cnblogs.com/chengxiaohui/articles/3951129.html

http://my.oschina.net/goal/blog/201032#OSC_h2_11

你可能感兴趣的:(Java)