Base64編碼
Base64編碼
1、三個重要概念
- 三個位元組由四個位元組表示的過程
- Base64碼錶
- 補位
2、如何用三個位元組表示四個位元組
一個位元組由8位二進位制組成,三個位元組總共28位,28 ÷ 4 = 6 , 所以轉換後有效的二進位制位數為6位。計算機以8位二機制為基礎,所以剩下的兩位在高位填充 0 。由此引申出兩個重要的概念
- 為什麼是64位
- 對照表
6位二進位制,$2^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個二進位制
根據規則使用三個位元組轉四個位元組表示,現在就拿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 001000 ),然後在分別轉換成十進位制數為(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 010000 ),然後轉換成十進位制數為(M)(Q),目前長度不夠4位,所以在最後補上2個= 由此1最終的base64編碼為MQ==