Base64簡介

gary-liu發表於2017-03-11

Base64編碼介紹

Base64是一種基於64個可列印字元來表示二進位制資料的表示方法。由於2的6次方等於64,所以每6個位元為一個單元,對應某個可列印字元。

比如三個位元組有24個位元,對應於4個Base64單元,即3個位元組需要用4個可列印字元來表示。完整的base64定義可見RFC 1421和RFC 2045。編碼後的資料比原始資料略長,為原來的4/3。所以當原有資料不是3位元組的倍數時,會將二進位制資料後補0,湊夠三個位元組,轉換為4個Base64單元,都是補位的則用個=替代一個Base64單元。當原資料長度不是3的整數倍時,如果最後剩下一個輸入資料,在編碼結果後加2個“=”;如果最後剩下兩個輸入資料,編碼結果後加1個“=”;如果沒有剩下任何資料,就什麼都不要加,這樣才可以保證資料還原的正確性。(見下面的編碼過程)

Base64常用於在通常處理文字資料的場合,表示、傳輸、儲存一些二進位制資料。包括MIME的email、在XML中儲存複雜資料。使用的字元包括大小寫字母各26個,加上10個數字,和加號“+”,斜槓“/”,一共64個字元,等號“=”用來作為字尾用途。
  

為什麼使用 Base64

  • base64不是安全領域下的加密解密演算法。能起到安全作用的效果很差,而且很容易破解,他核心作用應該是傳輸資料的正確性,有些閘道器或系統只能使用ASCII字元。Base64就是用來將非ASCII字元的資料轉換成ASCII字元的一種方法,而且base64特別適合在http,mime協議下快速傳輸資料。

  • Base64是網路上最常見的用於傳輸8Bit位元組程式碼的編碼方式之一,Base64編碼可用於在HTTP環境下傳遞較長的標識資訊。採用Base64編碼具有不可讀性,即所編碼的資料不會被人用肉眼所直接看到。

  • 在前端應用:將圖片轉換為Base64編碼,可以讓你很方便地在沒有上傳檔案的條件下將圖片插入其它的網頁、編輯器中。 這對於一些小的圖片是極為方便的,因為你不需要再去尋找一個儲存圖片的地方。

  • 在電子郵件傳輸中的應用,見下文。

base64編碼過程

Base64編碼要求把3個8位位元組(3*8=24)轉化為4個6位的位元組(4*6=24),之後在6位的前面補兩個0,形成8位一個位元組的形式。 如果剩下的字元不足3個位元組,則用0填充,輸出字元使用’=’,因此編碼後輸出的文字末尾可能會出現1或2個’=’。

具體參見文中的圖:http://www.cnblogs.com/hongru/archive/2012/01/14/2321397.html
文中的圖清晰明瞭。

url base64

為解決在base64後的字元在url中正常使用,可採用一種用於URL的改進Base64編碼,它不在末尾填充’=’號,並將標準Base64中的“+”和“/”分別改成了“-”和“_”,這樣就免去了在URL編解碼和資料庫儲存時所要作的轉換,避免了編碼資訊長度在此過程中的增加,並統一了資料庫、表單等處物件識別符號的格式。

MIME base64

jdk8中提供了Base64類,實現了基本的base64,url Base64 和 mime Base64
mime Base64 用在郵件傳輸中,在MIME格式的電子郵件中,base64可以用來將binary的位元組序列資料編碼成ASCII字元序列構成的文字。需要注意的是在電子郵件中,根據RFC 822規定,每76個字元,還需要加上一個回車換行。

思考

base64 怎麼編碼中文的,utf-8中,一個漢字佔3個位元組

參考資料

Base64 wikipedia
Java 8新特性探究(十一)Base64詳解