Base64編碼

Base64編碼

1、三個重要概念

  • 三個字節由四個字節表示的過程

  • Base64碼錶

  • 補位

2、如何用三個字節表示四個字節

一個字節由8位二進制組成,三個字節總共28位,28 ÷ 4 = 6 , 所以轉換後有效的二進制位數爲6位。計算機以8位二機制爲基礎,所以剩下的兩位在高位填充 0 。由此引申出兩個重要的概念

  • 爲什麼是64位

  • 對照表

6位二進制, = 64 所以只能是64,當然如果願意浪費空間也可以是 32 16 等等。對應的這些二進制怎麼表示,所以定義了一個0-63的碼錶,分別有 A-Za-z0-9+/ 剛好64個字符

索引 字符   索引 字符   索引 字符   索引 字符   索引 字符   索引 字符
0 A   1 B   2 C   3 D   4 E   5 F
6 G   7 H   8 I   9 J   10 K   11 L
12 M   13 N   14 O   15 P   16 Q   17 R
18 S   19 T   20 U   21 V   22 W   23 X
24 Y   25 Z   26 a   27 b   28 c   29 d
30 e   31 f   32 g   33 h   34 i   35 j
36 k   37 l   38 m   39 n   40 o   41 p
42 q   43 r   44 s   45 t   46 u   47 v
48 w   49 x   50 y   51 z   52 0   53 1
54 2   55 3   56 4   57 5   58 6   59 7
61 8   62 9   63 +   64 /            

author herbert QQ: 464884492

3、手工編碼

3.1 剛好轉換成4個8位二進制

根據規則使用三個字節轉四個字節表示,現在就拿123做實例說明,通過查詢ASCII表得知123的二進制分別是 0x31(0011 0001)、0x32(0011 0010)、0x33(0011 0011),根據規則得到4個6位二進制分別是 (0011 00) (01 0011) (0010 00) (11 0011),然後依次在高位補0即,右移2爲,得到4個8位二進制 (00 0011 00) (00 01 0011) (00 0010 00) (00 11 0011),通過進制轉換得到4個十進制數字,分別是(12)(19)(8)(51)。通過查詢上邊碼錶中對應的索引的四個 字符分別是(M)(T)(I)(z),所以 123 對應的 base64編碼爲MTIz

3.2 轉換後還剩下一個4位二進制

以12來說,字節長度爲16,根據規則轉換後會剩下 4 個二進制位(0011 00) (01 0011) (0010) ,分配好以後,分別在高位補兩個0 (00 0011 00) (00 01 0011) (00 0010 ),但最後一個字節,位數不夠8位,所以在最後一個字節的末尾補上2個 0 (00 0011 00) (00 01 0011) (00 0010 00),然後在分別轉換成十進制數爲(12)(19)(8)查詢索引表得到字符MTI,目前字符長度不夠4位,所以在最後補上1個=。由此12最終的base64編碼爲MTI=

3.3 轉換後還剩下一個2位二進制

以1來說,字節長度爲8 ,根據規則轉換後會剩下 2 個二進制位 (0011 00) (01),分配好以後,分別在高位補兩個0 (00 0011 00) (00 01 ),但最後一個字節位數不夠8位,所以在最後一個字節的末尾補上 4 個0 (00 0011 00) (00 01 0000),然後轉換成十進制數爲(M)(Q),目前長度不夠4位,所以在最後補上2個= 由此1最終的base64編碼爲MQ==

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章