base64 数据编码原理

例子

  • macOS 终端输入:echo d3d3LmNuYmxvZ3MuY29tL3poZW5nYmlu | base64 -D
  • Linux 终端输入:echo d3d3LmNuYmxvZ3MuY29tL3poZW5nYmlu | base64 -d

查看输出

什么是base64?

Base64 是网络上最常见的用于传输 8Bit 字节码的编码方式之一,Base64 就是一种基于 64 个可打印字符来表示二进制数据的方法。可查看 RFC2045~RFC2049,上面有 MIME 的详细规范。

base 64 使用 A-Z、a-z、0-9、+、,这 64 个字符组成

应用

用 Telnet 客户端远程登录邮件服务器时,提示输入用户名、密码的提示信息和输入的用户名密码信息,是通过 base64 进行编码的

原理

原理是将 3 字节转换成 4 字节(3*8=24=4*6)

  • 3 * 8 = 24 = 4 * 6 的含义就是,3 个字节是 24 位,可分为 4 组,每组 6 位,又因为 6 位不能表示一字节,所以在头部补两个 0
  • 将字符串转换为对应的 ascii 编码,再将 ascii 编码转换为二进制
  • 每次读取六位,不足的用 0 补位
  • 因为是 3 字节 转 4 字节,如果字符串不满 3 字节(3 * 8 = 24 位)则用 = 字符补全

举例:

  1. "A":
    1. 对应的 ascii 为 65,65 对应的二进制为 01000001
    2. 只有 1 字节,8 位,那么需要在二进制后补 4 位,8 + 4 = 12 = 2 * 6,也就是补 4 位后,只组成了两组(2个字节),base 64 原理是将 3 字节转为 4 字节,所以剩下的两个字节用 = 字符代替
    3. 最终 A 加密后为:QQ==
  2. "AS":
    1. ascii 分别为 65、83
    2. 转换为二进制为 01000001、01010011
    3. 2 * 8 = 16 + 2 = 3 * 6
    4. 所以,将二进制分为 3 组,每组 6 位,少的两位,末尾补 0
    5. 也就是 010000、010101、001100 这 3 组
    6. 然后对这 3 组的首位进行补 0,即 00010000、00010101、00001100
    7. 对应对照表即:QVM,又因为是 3 字节转 4 字节,所以部 =
    8. 最终结果就是 QVM=

经过了上面两个例子,发现 2 个字节加密后就是 4 个字节,1 个字节加密后也是 4 个字节

参考资料

[1] Base64加密原理(转)

原文地址:https://www.cnblogs.com/zhengbin/p/7535177.html