base64編碼原理解析

2021-10-07 10:36:44 字數 1546 閱讀 7408

一. base64編碼由來

為什麼會有base64編碼呢?因為有些網路傳送渠道並不支援所有的位元組,例如傳統的郵件只支援可見字元的傳送,像ascii碼的控制字元就不能通過郵件傳送。這樣用途就受到了很大的限制,比如二進位製流的每個位元組不可能全部是可見字元,所以就傳送不了。最好的方法就是在不改變傳統協議的情況下,做一種擴充套件方案來支援二進位制檔案的傳送。把不可列印的字元也能用可列印字元來表示,問題就解決了。base64編碼應運而生,base64就是一種基於64個可列印字元來表示二進位制資料的表示方法。

二. base64編碼原理

看一下base64的索引表,字元選用了"a-z、a-z、0-9、+、/" 64個可列印字元。數值代表字元的索引,這個是標準base64協議規定的,不能更改。64個字元用6個bit位就可以全部表示,乙個位元組有8個bit位,剩下兩個bit就浪費掉了,這樣就不得不犧牲一部分空間了。這裡需要弄明白的就是乙個base64字元是8個bit,但是有效部分只有右邊的6個bit,左邊兩個永遠是0。

那麼怎麼用6個有效bit來表示傳統字元的8個bit呢?8和6的最小公倍數是24,也就是說3個傳統位元組可以由4個base64字元來表示,保證有效位數是一樣的,這樣就多了1/3的位元組數來彌補base64只有6個有效bit的不足。你也可以說用兩個base64字元也能表示乙個傳統字元,但是採用最小公倍數的方案其實是最減少浪費的。結合下邊的圖比較容易理解。man是三個字元,一共24個有效bit,只好用4個base64字元來湊齊24個有效位。紅框表示的是對應的base64,6個有效位轉化成相應的索引值再對應base64字元表,查出"man"對應的base64字元是"twfu"。說到這裡有個原則不知道你發現了沒有,要轉換成base64的最小單位就是三個位元組,對乙個字串來說每次都是三個位元組三個位元組的轉換,對應的是base64的四個位元組。這個搞清楚了其實就差不多了。

三. 總結

說起base64編碼可能有些奇怪,因為大多數的編碼都是由字元轉化成二進位制的過程,而從二進位制轉成字元的過程稱為解碼。而base64的概念就恰好反了,由二進位制轉到字元稱為編碼,由字元到二進位制稱為解碼。

base64編碼主要用在傳輸、儲存、表示二進位制等領域,還可以用來加密,但是這種加密比較簡單,只是一眼看上去不知道什麼內容罷了,當然也可以對base64的字串行進行定製來進行加密。

base64編碼是從二進位製到字元的過程,像一些中文字元用不同的編碼轉為二進位制時,產生的二進位制是不一樣的,所以最終產生的base64字元也不一樣。例如"上網"對應utf-8格式的base64編碼是"5lik572r",對應gb2312格式的base64編碼是"yc/n+a=="。

**

BASE64編碼原理解析

1.每個字元按照ascii編碼對應乙個8bit,以3字元為一組 2.3 8 24,分成4份,每份6bit,在每份高位新增00,重新合成乙個4份8bit資料 3.新的4份8bit資料換算成10進製,得到4個數字 4.根據下面的base64編碼表,得到對應的新的字元 jascii 8374 748bit...

Base64原理解析

base64是基於64個字元進行轉換的,因為2的6次方正好為64,所以6bit就可以表示出64個字元,因此在轉換的過程中以6bit表示乙個字元。原理 3x8 4x6,核心是這個公式 base64的編碼都是按字串長度,以每3個8bit的字元為一組 針對每組,首先獲取每個字元的ascii編碼值 將asc...

BASE64 編碼原理

unit ubase64 編碼原理 將3個位元組轉換成4個位元組 3 x 8 24 4x6 先讀入3個位元組,每讀乙個位元組,左移8位,再右移四次,每次6位,這樣就有4個 位元組了。解碼原理 將4個位元組轉換成3個位元組,先讀入4個6位 用或運算 每次左 移6位,再右移3次,每次8位,這樣就還原了。...