資料加密之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,+,/
- 標準Base64只有64個字元(英文大小寫、數字和+、/)以及用作字尾等號;
- Base64是把3個位元組變成4個可列印字元,所以Base64編碼後的字串一定能被4整除(不算用作字尾的等號);
- 等號一定用作字尾,且數目一定是0個、1個或2個。這是因為如果原文長度不能被3整除,Base64要在後面新增\0湊齊3n位。為了正確還原,添加了幾個\0就加上幾個等號。顯然新增等號的數目只能是0、1或2;
- 嚴格來說Base64不能算是一種加密,只能說是編碼轉換。
下圖為Base64編碼表
java實現
import
java.util.Base64;
對於標準的Base64:
加密為字串使用Base64.getEncoder().encodeToString();
加密為位元組陣列使用Base64.getEncoder().encode();
解密使用Base64.getDecoder().decode();
對於URL安全或MIME的Base64,只需將上述getEncoder()getDecoder()更換為getUrlEncoder()getUrlDecoder()
或getMimeEncoder()和getMimeDecoder()即可。