1. 程式人生 > 實用技巧 >資料加密之Base64編碼演算法

資料加密之Base64編碼演算法

單純為了自己學習記錄。內容會根據自己的瞭解,不斷更新。

Base64是網路上最常見的用於傳輸8Bit位元組碼的編碼方式之一,Base64就是一種基於64個可列印字元來表示二進位制資料的方法。

Base64作用

由於某些系統中只能使用ASCII字元。Base64就是用來將非ASCII字元的資料轉換成ASCII字元的一種方法。

base64特別適合在http,mime協議下快速傳輸資料。

base64其實不是安全領域下的加密解密演算法。雖然有時候經常看到所謂的base64加密解密。其實base64只能算是一個編碼演算法,對資料內容進行編碼來適合傳輸。雖然base64編碼過後原文也變成不能看到的字元格式,但是這種方式很初級,很簡單。

原理

Base64要求把每三個8Bit的位元組轉換為四個6Bit的位元組(3*8 = 4*6 = 24),然後把6Bit再添兩位高位0,組成四個8Bit的位元組,也就是說,轉換後的字串理論上將要比原來的長1/3。

轉換前 11111111, 11111111, 11111111 (二進位制)

轉換後 00111111, 00111111, 00111111, 00111111 (二進位制)

什麼Base64演算法?

Base64是網路上最常見的用於傳輸8Bit位元組程式碼的編碼方式之一,Base64並不是安全領域的加密演算法,其實Base64只能算是一個編碼演算法,對資料內容進行編碼來適合傳輸。標準Base64編碼解碼無需額外資訊即完全可逆,即使你自己自定義字符集設計一種類Base64的編碼方式用於資料加密,在多數場景下也較容易破解。Base64編碼本質上是一種將二進位制資料轉成文字資料的方案。對於非二進位制資料,是先將其轉換成二進位制形式,然後每連續6位元(2的6次方=64)計算其十進位制值,根據該值在A--Z,a--z,0--9,+,/

這64個字元中找到對應的字元,最終得到一個文字字串。基本規則如下幾點:

  • 標準Base64只有64個字元(英文大小寫、數字和+、/)以及用作字尾等號;
  • Base64是把3個位元組變成4個可列印字元,所以Base64編碼後的字串一定能被4整除(不算用作字尾的等號);
  • 等號一定用作字尾,且數目一定是0個、1個或2個。這是因為如果原文長度不能被3整除,Base64要在後面新增\0湊齊3n位。為了正確還原,添加了幾個\0就加上幾個等號。顯然新增等號的數目只能是0、1或2;
  • 嚴格來說Base64不能算是一種加密,只能說是編碼轉換。

下圖為Base64編碼表

java實現

importjava.util.Base64;

對於標準的Base64:

加密為字串使用Base64.getEncoder().encodeToString();

加密為位元組陣列使用Base64.getEncoder().encode();

解密使用Base64.getDecoder().decode();

對於URL安全或MIME的Base64,只需將上述getEncoder()getDecoder()更換為getUrlEncoder()getUrlDecoder()

或getMimeEncoder()和getMimeDecoder()即可。