Base64算法理解

Base64是加密算法嗎?

因爲Base64算法是可逆的,所以不能算是加密算法,而算是一種編碼方式。是一種使用64個可打印字符來表示二進制數據的編碼方式

作用

  • 轉碼
  • 向瀏覽器以字符串輸出
  • 當url中有特殊字符時,可以利用Base64編碼來進行轉義
  • 對於圖片,本身是二進制,而Base64可以表示任何的二進制數據,因此可以直接在圖片的src下存放Base64編碼後的圖片內容,這樣就可以直接展示圖片,而無需去請求對應url路徑的圖片,減少網絡開銷
  • 語言文字底層通過二進制傳輸,此時也可以通過Base64編碼來展示

算法原理

官方

把每3個8位字節轉換爲四個6位的字節(3*8 = 4*6 = 24),然後在每個6位的前面補兩個0(不足6位的後面補0),組成四個8位的字節,再將每個字節的值和64位字符編碼表的值進行替換,不足4個字節的,後面補=

64的由來

一般中文佔兩個字節,而最大的字符是3個字節,也就是24位(一個字節8位),而24=3*8=4*6,所以我們可以用4個6位來表示一個字符(爲了兼容最大的字符,所以用3個字節來表示一個),而二進制6位數的最大值是111111=63,也就是64個字符,這就是Base64當中64的由來。

64個字符編碼表

0-25是大寫字母,26-51是小寫字母,52到61是數字,62是+,63是/

計算過程
  1. 找到指定編碼字符的字符編碼表
  2. 找到編碼表中對應字符的值,並將值轉爲二進制
  3. 對二進制數進行分組,每6位一組(不足6位的後面補0)
  4. 去Base64表中查找其對應的編碼字符
  5. 編碼表參照完成後,最後不足4字節的後面補=,編碼結束

例如將GB2312編碼中的字進行base64編碼:

  1. 在gb2312編碼表裏(鏈接)尋找字,發現字的十六進制編碼爲C4E3,二進制爲:1100010011100011
  2. 將數字每6個一組:110001 001110 001100,對應的十進制值就是49 14 12,參照base64編碼表(鏈接),可知對應編碼爲:x O M
  3. 因爲不足4字節(3字節),所以最後補一個=,所以最終結果爲:xOM=
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章