2. 新增Base64编解码API

2.1. Base64的由来

目前Base64已经成为网络上常见的传输8Bit字节代码的编码方式之一。在做支付系统时,系统之间的报文交互都需要使用Base64对明文进行转码,然后再进行签名或加密,之后再进行(或再次Base64)传输。那么,Base64到底起到什么作用呢?

在参数传输的过程中经常会遇到这样一种情况:使用全英文字符传输没问题,一旦涉及到中文就会出现乱码情况。与此类似,网络上传输的字符并不全是可打印的字符,比如二进制文件、图片等。Base64的出现就是为了解决此问题,它是基于64个可打印的字符来表示二进制的数据的一种方法。

电子邮件刚问世的时候,只能传输英文,但后来随着用户的增加,中文、日文等文字的用户也有需求,但这些字符并不能被服务器或网关有效处理,因此Base64就登场了。随之,Base64在URL、Cookie、网页传输少量二进制文件中也有相应的使用。

Base64是⽹络上常⻅的用于传输8Bit字节码的编码⽅式之⼀, Base64就是一种基于64个可打印字符(A-Z,a-z,0-9,+,/)来表示二进制数据的一种编码解码方法。Base64是⼀种能将任意二进制数据用64种字符组合成字符串的一种方法,并且是可逆的(编码解码)。

2.2. Base64与加密的区别

严格来说,Base64只是一种编解码算法,而非加密算法,一般对重要信息做加密不使用Base64。加密技术可自行搜索MD5、SHA、ASE、RSA等技术或算法。

2.3. Base64编码与解码

import java.io.UnsupportedEncodingException;
import java.util.Base64;
import java.util.Base64.Decoder;
import java.util.Base64.Encoder;

/**
 * jdk8提供的Base64编解码效率远大于sun.misc和 Apache Commons Codec的效率
 * 注:编解码的编码方式一定要统一。
 * @author XIAO
 *
 */
public class Base64Test {

	public static void main(String[] args) {
		String str = "我爱我家aaa。";

		Encoder encoder = Base64.getEncoder();// 编码对象
		Decoder decoder = Base64.getDecoder();// 解码对象
		try {
			// 1.编码
			String encoderStr = encoder.encodeToString(str.getBytes("UTF-8"));
			System.out.println(encoderStr);// 5oiR54ix5oiR5a62YWFh44CC
			// 2.解码
			byte[] decode = decoder.decode(encoderStr);
			System.out.println(new String(decode, "UTF-8"));// 我爱我家aaa。
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
	}

}
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐