🚫 Ad Blocker Detected

Please disable your AD blocker to continue using this site. Ads help us keep the content free! please press keyboard F5 to refresh page after disabled AD blocker

請關閉廣告攔截器以繼續使用本網站。廣告有助於我們保證內容免費。謝謝! 關閉後請按 F5 刷新頁面

0%

【深入淺出】Base編碼 (Base64為例子)

Base家族以Base64最為出名,這邊會用Base64編碼來做介紹

寫網站應該都用過Base64但你對於他的原理了解嗎?

此篇和大家分享Base家族的秘密


用途:

Base64主要用途是某些系統中只能使用ASCII字符,為了避免某些機器無法識別我們傳輸資料

Base64就是用來將非ASCII字符的數據轉換成ASCII字符的一種方法。

 base64特別適合在http,mime協議下快速傳輸數據(例如我們常使用 Email)

它使用下面表中所使用的字符與編碼。

http://www.asciitable.com/index/asciifull.gif

圖片連結

Base64 中的64其實是有含意的

他會把資料轉成

a~z (26)
A~Z (26)
0~9 (10)
+ (1)
/ (1)

上面編碼成上面五種種類字元的資料 64就是把所以可用字元數量總合

64 = 26+26+10+1+1


原理:

那Base64是怎麼將資料轉成a~z,A~Z,0~9,/,+的組合呢?

最終目標想要把資料轉成在Ascii Code 0 ~ 127 的字元

Base64 wiki說明

轉換的時候,將3位元組的資料,先後放入一個24位元的緩衝區中,先來的位元組占高位。資料不足3位元組的話,於緩衝區中剩下的位元用0補足。每次取出6位元,按照其值選擇ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/中的字元作為編碼後的輸出,直到全部輸入資料轉換完成。

這邊有幾個重點

  1. 會把資料分割成每 3 byte (24bit) 為單位
  2. 資料不足3 byte的話,於緩衝區中剩下的bit用0補足
  3. 計算出來值依照下表索引轉換成Base64可用字元 Base64 wiki說明
  4. 直到全部輸入資料轉換完成

下面有個例子方便大家了解!


實際例子:

先來看看下面的例子:

BCBase64 轉成 QkM= 過程.

  1. 將字元轉換成二進制
  • B (66) = 0 1 0 0 0 0 1 0
  • C (67) = 0 1 0 0 0 0 1 1
  1. 資料不足3 byte的話,於緩衝區中剩下的bit用0補足,所以我們將第三個Byte資料用0補齊

  2. 最左邊數字為頭,用每組6bit來重新分組轉換後的資料.

  3. 將轉換後的資料依照Base64轉換表 轉換成Base64字元.

img

Base64編碼 Q k M =
範例來自於Wiki

= 並不是`Base64的字元 而是代表補0使用的
雖然Base64在最後常常會看到 = 或 == 結尾,那是因為遇到要補位的情況.如果字元剛剛好滿的狀態(3 bytes)就不會看到 = 符號

img
範例來自於Wiki

小結:

Base64分享到這邊!

其實Base家族除了64還有 Base32,Base16 .... 你也可以自行依照上面算法建立自己 Base 編碼.

Base32 : a~z , 2~7

原理其實都是一樣的

__此文作者__:Daniel Shih(石頭)
__此文地址__: https://isdaniel.github.io/base64-principle/
__版權聲明__:本博客所有文章除特別聲明外,均採用 CC BY-NC-SA 3.0 TW 許可協議。轉載請註明出處!

如果本文對您幫助很大,可街口支付斗內鼓勵石頭^^