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