本篇文章主要是從Base64的原理入手,並給出java的Base64實現。方便了解、學習Base64。
base64的簡介----摘自於百度百科
一、Base64大致用途
很早之前,電子郵件剛剛問世,那時候消息的傳遞都是英文,後來中國開通了互聯網之後,對郵件的使用量也大量增加,這時候電子郵件就有了中文的需求。但是中文在傳輸的時候不能被有效地處理,這時候Base就出來了,Base64通過對這些中文進行編碼,轉化爲服務器和網關能夠識別的數據。這時候就能夠使用電子郵件有效地傳輸了。
上面的這個例子不是說Base64專門爲電子郵件而生的,從其誕生之初,就開始在各大領域有了廣泛的應用。比如說網絡上傳遞圖片,我們可以Base64先對圖片進行處理,然後就可以有效的傳輸了。
二、Base64原理
1、Base64編碼
Base64的原理超級簡單,相信我們都知道ASCII 編碼,從A-Z、a-z、0-9和一些其他的特殊字符,這些字符都有唯一的一個數字來表示。比如說a是97,A是65。我們來回憶下:
同理Base64也有這樣一套編碼。範圍是”A-Z“、”a-z“、”0-9“、”+“、”/“一共64個字符。我們給出來自百度的一個表格來看一下,這個比ASCII編碼要簡單多了,只有64個。【由於索引是從0開始,所以最後的索引是63;在編碼的時候Base64就是通過下面的表來進行轉換編碼的】
2、Base64編碼的原理
比如說有一封郵件,我們想要對其使用Base64進行編碼。怎麼辦呢?基本步驟如下:
(1)對郵件的數據進行切分,每三個字節一組,一共24個bit。
(2)對切分後的數據重組,24個bit重組爲4組,每組6個bit。
(3)對重組後的數據處理,每組最前面添加兩個“0”,構成每組8個bit。此時一共32個bit。
(4)根據Base64編碼表,獲取相應的編碼值。
此時一封完整的郵件,被切分重組處理之後就變成了Base64編碼了。基本原理其實很簡單。不過你不理解也沒關係,我們直接上個實例來解釋一下。
3、實例驗證
比如說電子郵件裏面出現了三個字母hao。我們要對這個三個字符使用Base64進行編碼。
(1)對郵件的數據進行切分,每三個字節一組,一共24個bit
(2)對切分後的數據重組,24個bit重組爲4組,每組6個bit
(3)對重組後的數據處理,每組最前面添加兩個“0”,構成每組8個bit。由於在最前面添加的0,所以對數值不構成影響。
(4)根據Base64編碼表,獲取相應的編碼值
(5)完成編碼的轉換
到這我們基本上就是實現了Base64編碼機制從hao到aGFv的轉換。
有些地方需要我們去注意一下:
(1)在第三步中,最前面添加了兩個0,所以最終編碼之後要比之前多出三分之一的大小。
(2)上面的例子中,我們使用的是ASCII編碼,但是如果我們使用UTF-8,對應Base64編碼的結果是不一樣的。
(3)Base64只是進行了編碼,方便數據的傳輸而已。這可不是加密。
原理也搞清楚了,現在我們就實現一下。
三、代碼實現
你可以自己去實現一個編碼解碼的完整過程,但是java已經爲我們封裝好了,我們直接只用別人造好的輪子多好。不管是自己寫還是使用別人的,原理搞清楚就OK了。
package com.epoch.hardwareserver.controller;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import java.io.IOException;
/**
* base64編碼入門案例
*/
public class Base64Code {
public static void main(String[] args) throws IOException {
String str = "hao";
/**
* 編碼
*/
BASE64Encoder encoder = new BASE64Encoder();
String encoderResult = encoder.encode(str.getBytes());
System.out.println("編碼結果爲:"+encoderResult);//aGFv
/**
* 解碼
*/
BASE64Decoder decoder = new BASE64Decoder();
byte[] decoderResult = decoder.decodeBuffer(encoderResult);
System.out.println("解碼結果爲:"+new String(decoderResult));//hao
}
}
其實java實現的方式有很多種,百度百科也有介紹;其他的還有Commons Codec和Bouncy Castle。實現的過程和JDK提供的類似,我們只需要導入相應的jar包即可。
Base64算法的應用場景有E-Mail、密鑰、證書文件等等。這也只是入門,想要深入瞭解,還需要看更多得相關書籍。