【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中的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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值