Jdk8新特性(二):新增Base64編解碼API

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();
		}
	}

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章