Base64由來,與編碼方式

2021-09-29 12:59:07 字數 1784 閱讀 8641

base64到底是乙個什麼東西?它有什麼用?它是怎麼來的?

世界上幾乎所有的東西,都不會無中生有。base64也一樣。

我們知道在計算機中任何資料都是按ascii碼儲存的,而ascii碼的128~255之間的值是不可見字元。而在網路上交換資料時,比如說從a地傳到b地,往往要經過多個路由裝置,由於不同的裝置對字元的處理方式有一些不同,這樣那些不可見字元就有可能被處理錯誤,這是不利於傳輸的。所以就先把資料先做乙個base64編碼,統統變成可見字元,這樣出錯的可能性就大降低了。

base64的初衷,是為了滿足電子郵件中不能直接使用非ascii碼字元的規定因為早期的一些郵件伺服器只支援文字資訊,不支援二進位制資訊和檔案。而base64編碼後的結果都是ascii低128位,也就是都是純文字的,適合用電子郵件來傳送二進位制資料。這就是base64的由來。後來它就演變成了網路上常見的用於傳輸8bit位元組資料的一種編碼方式之一

最常用的應用場景就是在http協議上傳輸較長的文字資訊。它是將使用者輸入的二進位制資料,打包成一種安全格式,將其作為http首部欄位的值傳送出去,而無須擔心其中包含會破壞http分析程式的冒號、換行符或二進位制值。base64 編碼與將二進位制資料文字化的uuencode和binhex標準在本質上是類似的,但是空間效率更高。

base64的原理很簡單,首先,準備乙個包含64個字元的陣列:

[『a』, 『b』, 『c』, … 『a』, 『b』, 『c』, … 『0』, 『1』, … 『+』, 『/』]

然後,對二進位制資料進行處理,每3個位元組一組,一共是3x8=24bit,劃為4組,每組正好6個bit:

這樣我們得到4個數字作為索引,然後查表,獲得相應的4個字元,就是編碼後的字串。

所以,base64編碼會把3位元組的二進位制資料編碼為4位元組的文字資料,長度增加33%,好處是編碼後的文字資料可以在郵件正文、網頁等直接顯示。

如果要編碼的二進位制資料不是3的倍數,最後會剩下1個或2個位元組怎麼辦?base64用\x00位元組在末尾補足後,再在編碼的末尾加上1個或2個=號,表示補了多少位元組,解碼的時候,會自動去掉。

由於標準的base64編碼後可能出現字元+和/,在url中就不能直接作為引數,所以又有一種"url safe"的base64編碼,其實就是把字元+和/分別變成-和_

還可以自己定義64個字元的排列順序,這樣就可以自定義base64編碼,不過,通常情況下完全沒有必要。

base64是一種通過查表的編碼方法,不能用於加密,即使使用自定義的編碼表也不行。

base64適用於小段內容的編碼,比如數字證書簽名、cookie的內容等。

由於=字元也可能出現在base64編碼中,但=用在url、cookie裡面會造成歧義,所以,很多base64編碼後會把=去掉:

去掉=後怎麼解碼呢?因為base64是把3個位元組變為4個位元組,所以,base64編碼的長度永遠是4的倍數,因此,需要加上=把base64字串的長度變為4的倍數,就可以正常解碼了。

請寫乙個能處理去掉=的base64解碼函式

base64是一種任意二進位製到文字字串的編碼方法,常用於在url、cookie、網頁中傳輸少量二進位制資料。

嚴格來說base64不能算是一種加密,只能說是編碼轉換。使用base64的初衷。是為了方便把含有不可見字串的資訊用可見字串表示出來,以便複製貼上。

每個6位值都表示了從0~63之間的數字,對應base64字母表中的64個字元之一。下圖是轉換表,摘自rfc2045

base64編碼 動畫演示 Base 64 編碼

base64 是一種十分流行的編碼方式,僅僅使用 64 個字元加等號 就可以以文字的形式表示所有的二進位制資料了,因為它能夠把二進位制格式通過編碼轉換成可見字元,所有我們就可以通過的把二進位制格式比如,檔案等通過 base64 編碼然後通過文字的形式共享出去,是不是很神奇呀。把輸入的資料轉換成 二進...

Base64編碼演算法

base64要求把每三個8bit的位元組轉換為四個6bit的位元組 3 8 4 6 24 然 後把6bit再添兩位高位0,組成四個8bit的位元組,也就是說,轉換後的字串理 論上將要比原來的長1 3。轉換後,我們用乙個碼表來得到我們想要的字串 也就是最終的base64編碼 這個表是這樣的 0 a 1...

Base64編碼演算法

base64 construe aaaaaaaa bbbbbbbb cccccccc dddddddd ffffffff 3byte to 4byte is encode 00aaaaaa 00aabbbb 00bbbbcc 00cccccc 3byte newlen 4 00aaaaaa 00aa...