例子
- 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 位)则用 = 字符补全
举例:
- "A":
- 对应的 ascii 为 65,65 对应的二进制为 01000001
- 只有 1 字节,8 位,那么需要在二进制后补 4 位,8 + 4 = 12 = 2 * 6,也就是补 4 位后,只组成了两组(2个字节),base 64 原理是将 3 字节转为 4 字节,所以剩下的两个字节用 = 字符代替
- 最终 A 加密后为:QQ==
- "AS":
- ascii 分别为 65、83
- 转换为二进制为 01000001、01010011
- 2 * 8 = 16 + 2 = 3 * 6
- 所以,将二进制分为 3 组,每组 6 位,少的两位,末尾补 0
- 也就是 010000、010101、001100 这 3 组
- 然后对这 3 组的首位进行补 0,即 00010000、00010101、00001100
- 对应对照表即:QVM,又因为是 3 字节转 4 字节,所以部 =
- 最终结果就是 QVM=
经过了上面两个例子,发现 2 个字节加密后就是 4 个字节,1 个字节加密后也是 4 个字节
参考资料
[1] Base64加密原理(转)