Base64 編碼解碼原理

chengmo發表於2017-10-11

  Base64編碼,是我們程式開發中經常使用到的編碼方法。它是一種基於用64個可列印字元來表示二進位制資料的表示方法。它通常用作儲存、傳輸一些二進位制資料編碼方法!也是MIME(多用途網際網路郵件擴充套件,主要用作電子郵件標準)中一種可列印字元表示二進位制資料的常見編碼方法!它其實只是定義用可列印字元傳輸內容一種方法,並不會產生新的字符集!有時候,我們學習轉換的思路後,我們其實也可以結合自己的實際需要,構造一些自己介面定義編碼方式。好了,我們一起看看,它的轉換思路吧!

  Base64實現轉換原理

  它是用64個可列印字元表示二進位制所有資料方法。由於2的6次方等於64,所以可以用每6個位元為一個單元,對應某個可列印字元。我們知道三個位元組有24個位元,就可以剛好對應於4個Base64單元,即3個位元組需要用4個Base64的可列印字元來表示。在Base64中的可列印字元包括字母A-Z、a-z、數字0-9 ,這樣共有62個字元,此外兩個可列印符號在不同的系統中一般有所不同。但是,我們經常所說的Base64另外2個字元是:“+/”。這64個字元,所對應表如下。

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

  如果最後剩下兩個輸入資料,在編碼結果後加1個“=”;如果最後剩下一個輸入資料,編碼結果後加2個“=”;如果沒有剩下任何資料,就什麼都不要加,這樣才可以保證資料還原的正確性。

  編碼後的資料比原始資料略長,為原來的4/3。無論什麼樣的字元都會全部被編碼,因此不像Quoted-printable 編碼,還保留部分可列印字元。所以,它的可讀性不如Quoted-printable編碼!

  M的Ascii碼是77,前六位對應值為19,對應base64字元是T,如此類推。其它字元編碼就可以自動轉換得到!我們看看另外不是剛好是3個位元組的情況!

相關文章