Base64編碼原理及其實現

序言

在說Base64之前,我們應當知道位與字節的含義:

  • 位(bit): 計算機中數據的最小單位, 也就是平常看到的‘0’ 和 ‘1’這樣的東西, 每個‘0’或‘1’代表一位。
  • 字節(Byte): 計算機中數據的基本單位,每8位組成一個字節。 即 1B =8b

爲什麼要Base64編碼

因爲在網絡傳輸數據時,有些數據並不是都是可見字符,那些不可見字符(如 空格、換行等等)可能會被處理錯誤。 像傳輸圖片, 圖片我們用文本編輯器打開的話是亂碼的,因爲包含了不可見的字符。 直接傳輸的話,那些不可見的字符傳輸就有問題,所以Base64編碼解決的就是 把不可見的字符全部編碼爲可見的字符,這樣傳輸被處理錯誤的可能性大大降低。

Base64編碼原理

Base64是一種基於64個可打印的字符來表示二進制數據的方法。 可打印的64個字符包含A-Z、a-z、0-9、+、/

如下圖:

Base64索引表

Base64編碼原理幾個基本步驟

  • 每3個字節的ascii碼爲一組,就有24bit
  • 然後分爲4組,每組6bit。
  • 算出每組二進制轉爲十進制值
  • 然後根據Base64 索引表 (十進制值就代表索引) 來找對應的字符。 得到的就是Base64編碼後的字符。

例如 abc

  • ascii編碼 : 97 、 98 、99
  • 二進制 : 01100001 、 01100010 、01100011
  • 每6bit分爲一組: 011000 、010110 、 001001 、100011
  • 索引值: 24 、 22 、 9 、 35
  • 根據Base64索引表找到對應的值: Y 、 W 、 J 、j

測試驗證:

abc經Base64編碼後

"abc"經過Base64編碼後得到的結果爲YWJj , 說明按照這樣的計算時沒有問題的。
如果待Base64編碼的字節數不是3的倍數怎麼辦。

一個字節時: Base64是每三個字節一組,但是隻有一個字節,只有8位,每6位分爲一組,多出的2位 不足6位, 就後面補0 湊齊6位, 但是後面還有兩個輸入數據,不夠就用 ‘=’代替。 如上圖

測試驗證:

a經Base64編碼後

兩個字節時: Base64是每三個字節一組,但是隻有兩個字節,只有16位,每6位一組,多出4位,不足
6位,後面補兩個0湊齊6位, 但是最後還有一位需要輸入,就用‘=’代替。如上圖

測試驗證:

ab經Base64編碼後

Base64是以三個字節爲一組,所以只有兩種情況:要麼多一個字節,要麼多兩個字節。 多一個字節時後面會多兩個‘==’,多兩個字節時會多一個‘=’。
Base64解碼就是編碼逆過程,懂編碼原理,解碼原理逆推即可。

總結:

  • Base64編碼作用就是把有不可見的字符全部轉爲可見的字符。以方便網絡傳輸;
  • Base64不屬於加密,雖然Base64編碼後,肉眼很難看出來,但是Base64編碼原理很簡單,很容易被解析出來。
  • 字符在不同的編碼下,如UTF-8、GBK等。可能通過Base64編碼後得到的結果不同。
  • Base64是以三個字節爲一組,3*8=24位,然後以6位一組,4組那就是4個字節,所以每三個字節Base64後就會多出一個字節。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章