Base64編碼

##Base64編碼 一、三個重要概念

  • 三個字節由四個字節表示的過程
  • Base64碼錶
  • 補位

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

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

  • 爲何是64位
  • 對照表

6位二進制,2^6 = 64 aafa a 因此只能是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: 464884492spa

三、手工編碼

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編碼爲MTIzcode

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=orm

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==索引

相關文章
相關標籤/搜索