Base64 是一种常用的二进制到文本的编码方式, 应用非常广泛.

考虑这么一种场景, 两人之间现只能发送文字信息, 但他们要发送一张 jpeg 格式的图片.

如果尝试用文本编辑软件打开 jpeg, 将会发现是一大堆乱码. 原因是 jpeg 是二进制文件, 每个字节表示的东西几乎都不是给人看的字符, 自然没法解析出来.

而如果想把这些东西强行复制出来, 那更是一种灾难. 里面会有各种各样神奇的比如换行符, 甚至是\0 (文件结束符) 这种迷惑的东西. 自然是没法很好地以文本的方式传输的.

于是就有了这么一种把任意二进制文件都转化成没有奇怪特殊字符的方法.

首先把二进制文件或者任意字符串写成一串 01. 然后把相邻的 6 位合起来, 用 A-Za-z0-9+/ 一共 (64=2^6) 个字符来表示. 最后可能省下 2 个或者 4 个空位, 则用 0 补齐, 然后放一堆等号上去.

这样就可以把任意的文件, 比如文字, 图片, 视频都转换成肉眼可见, 易于复制和通过 http 之类的协议以及 json 之类的格式来传输的数据了.

下面是一些例子

hello world => aGVsbG8gd29ybGQ=

我不知道 base64 是什么 => 5oiR5LiN55+l6YGTIGJhc2U2NCDmmK/ku4DkuYg=

宝宝在这里给宝宝藏了一张小纸条: 6KaB5LiN6KaB5Y6755yL55yL5a6d5a6d55qE572R5piT5LqR6Z+z5LmQ5q2M5Y2V6YeM5aSa5LqG5LuA5LmI6L+35oOR55qE5Lic6KW/Pw==

я говорю по русский плохо => 0Y8g0LPQvtCy0L7RgNGOINC/0L4g0YDRg9GB0YHQutC40Lkg0L/Qu9C+0YXQvg==

=>

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

那么如何方便地编码与解码 base64 呢?

在 linux / mac 的终端 (terminal) 里一般都带了 base64 的编码与解码程序.

直接运行 `echo “abcde” | base64" 就可以对 abcde 这个串进行 base64 编码了.

具体来讲, echo 命令将 abcde 这个字符输出到了标准输出, 而 | 的功能是将 echo 程序的标准输出和 base64 程序的标准输入接起来. 这样 abcde 就成为了 base64 程序的标准读入所读到的内容, 而 base64 程序会从标准输入中读入字符串, 将它 base64 编码的结果输出到标准输出中. 因为我们未对它的标准输出进行任何指定, 所以它的输出会被显示到屏幕上.

相应地, 只需要给 base64 加上参数 -d, 如 echo "YWJjZGUK" | base64 -d, 则可进行 base64 解码. 例如将 YWJjZGUK 解码为 abcde.

当然啦, 还有更简单的方法, 直接打开搜狗, 输入 base64 解码, 就会获得很多的在线解码工具 (例如 https://base64.us/), 甚至不需要下载, 只要在网页里粘贴内容即可实现编码/解码.