什么是Base64


本文作者: jsweibo

本文链接: https://jsweibo.github.io/2019/03/04/%E4%BB%80%E4%B9%88%E6%98%AFBase64/

摘要

本文主要讲述了:

  1. 什么是 Base64
  2. Base64 码表
  3. 编码原理
  4. 解码原理

正文

什么是 Base64

Base64 是一种使用可打印字符来表示二进制数据的字符编码方案。

1 个 Base64 字符用 6 个二进制位表示。

Base64 将 3 个字节编码为 4 个 Base64 字符。

Base64 码表

Bin Dec Hex Char
0000 0000 0 00 A
0000 0001 1 01 B
0000 0010 2 02 C
… … … …
0001 1001 25 19 Z
0001 1010 26 1A a
0001 1011 27 1B b
0001 1100 28 1C c
… … … …
0011 0011 51 33 z
0011 0100 52 34 0
0011 0101 53 35 1
0011 0110 54 36 2
… … … …
0011 1101 61 3D 9
0011 1110 62 3E +
0011 1111 63 3F /

此外,=用作后缀。

编码原理

  1. 根据 ASCII 码表,每次取出 3 个字节(若不足 3 字节,则全部取出),获得对应的二进制 ASCII 码点
  2. 根据 Base64 码表,每次取出 6 位,换算为对应的 Base64 字符。若不足 6 位,剩余的二进制 ASCII 码点左移补 0。每左移 2 位就在 Base64 编码后增加 1 个=

示例:将eng进行 Base64 编码

  1. 根据 ASCII 码表,e的二进制 ASCII 码点为01100101。
  2. 根据 ASCII 码表,n的二进制 ASCII 码点为01101110。
  3. 根据 ASCII 码表,g的二进制 ASCII 码点为01100111。
  4. 整理获得:01100101 01101110 01100111。
  5. 每次取出 6 位,整理获得:011001 010110 111001 100111。
  6. 根据 Base64 码表,011001的 Base64 字符为Z。
  7. 根据 Base64 码表,010110的 Base64 字符为W。
  8. 根据 Base64 码表,111001的 Base64 字符为5。
  9. 根据 Base64 码表,100111的 Base64 字符为n。
  10. 整理获得:ZW5n。

示例:将en进行 Base64 编码

  1. 根据 ASCII 码表,e的二进制 ASCII 码点为01100101。
  2. 根据 ASCII 码表,n的二进制 ASCII 码点为01101110。
  3. 整理获得:01100101 01101110。
  4. 每次取出 6 位,整理获得:011001 010110 1110。
  5. 根据 Base64 码表,011001的 Base64 字符为Z。
  6. 根据 Base64 码表,010110的 Base64 字符为W。
  7. 1110不足 6 位,左移 2 位,获得111000。
  8. 根据 Base64 码表,111000的 Base64 字符为4。
  9. 由于左移 2 位,需在 Base64 编码后增加 1 个=。
  10. 整理获得:ZW4=。

示例:将e进行 Base64 编码

  1. 根据 ASCII 码表,e的二进制 ASCII 码点为01100101。
  2. 整理获得:01100101。
  3. 每次取出 6 位,整理获得:011001 01。
  4. 根据 Base64 码表,011001的 Base64 字符为Z。
  5. 01不足 6 位,左移 4 位,获得010000。
  6. 根据 Base64 码表,010000的 Base64 字符为Q。
  7. 由于左移 4 位,需在 Base64 编码后增加 2 个=。
  8. 整理获得:ZQ==。

解码原理

  1. 根据 Base64 码表,每次取出 4 个 Base64 字符(若不足 4 个,则全部取出),获得对应的二进制 Base64 码点。若有结尾有 n 个=,则将最后 1 个 Base64 字符的二进制 Base64 码点右移 2n 位
  2. 根据 ASCII 码表,每次取出 8 位,换算为对应的 ASCII 字符

示例:将ZW5n进行 Base64 解码。

  1. 根据 Base64 码表,Z的二进制 Base64 码点为011001。
  2. 根据 Base64 码表,W的二进制 Base64 码点为010110。
  3. 根据 Base64 码表,5的二进制 Base64 码点为111001。
  4. 根据 Base64 码表,n的二进制 Base64 码点为100111。
  5. 整理获得:011001 010110 111001 100111。
  6. 每次取出 8 位,整理获得:01100101 01101110 01100111。
  7. 根据 ASCII 码表,01100101的 ASCII 字符为e。
  8. 根据 ASCII 码表,01101110的 ASCII 字符为n。
  9. 根据 ASCII 码表,01100111的 ASCII 字符为g。
  10. 整理获得:eng。

示例:将ZW4=进行 Base64 解码。

  1. 根据 Base64 码表,Z的二进制 Base64 码点为011001。
  2. 根据 Base64 码表,W的二进制 Base64 码点为010110。
  3. 根据 Base64 码表,4的二进制 Base64 码点为111000。
  4. 由于有 1 个=,111000需要右移 2 位,获得1110。
  5. 整理获得:011001 010110 1110。
  6. 每次取出 8 位,整理获得:01100101 01101110。
  7. 根据 ASCII 码表,01100101的 ASCII 字符为e。
  8. 根据 ASCII 码表,01101110的 ASCII 字符为n。
  9. 整理获得:en。

示例:将ZQ==进行 Base64 解码。

  1. 根据 Base64 码表,Z的二进制 Base64 码点为011001。
  2. 根据 Base64 码表,Q的二进制 Base64 码点为010000。
  3. 由于有 2 个=,010000需要右移 4 位,获得01。
  4. 整理获得:011001 01。
  5. 每次取出 8 位,整理获得:01100101。
  6. 根据 ASCII 码表,01100101的 ASCII 字符为e。
  7. 整理获得:e。

参考资料

本文作者: jsweibo

本文链接: https://jsweibo.github.io/2019/03/04/%E4%BB%80%E4%B9%88%E6%98%AFBase64/


本文对你有帮助?请支持我


支付宝
微信