feling.net/pages/base64.md

2.5 KiB
Raw Permalink Blame History

layout title date keywords description
pages 理解 Base64 编码 2020-01-16
base64
base64编码
base64解码
base64图片
base64 是一种编码算法,它使得 “可打印的字符” 能表示 “二进制数据”。换句话说就是用字符串来表示二进制文件。现在的web开发中也经常用base64来编码图片。

在线编解码工具, 支持图片文件: Base64 编码 解码 图片

什么是 Base64有什么用

base64 是一种编码算法,它使得 “可打印的字符” 能表示 “二进制数据”。换句话说,就是用字符串来表示二进制文件。

最早在通过电子邮件收发消息的过程中人们只发送文本内容。后来增加了发送二进制文件的需求。base64编码就是在这一个需求的解决过程中诞生的。

现在的web开发中也经常用base64来编码图片。一些数字证书签名也会用base64存储。

数据库技术中偶尔也会使用base64编码将原本使用的UUID数据主键编码为更短的字符串。

Base64 的编码过程

首先取64种可打印的字符依次编号。假设用数组 a 存储这64个可打印字符数组下标就是他们对应的编号。

a = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
    'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
    'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
    'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/']

然后对要编码的二进制数据每次取6个比特。我们知道6位二进制所代表的数字范围是 0 ~ 63。用变量名 i 表示这6个比特所代码的数字。a[i] 的值就是这6个比特对应的base64编码结果。

最后规定24个比特即3个字节为一组每组会产生4个可打印字符。如果最后一组的数据不足24个比特= 补齐。

思考为什么是64而不是其他数字

从上面编码的过程中可以看出原本3个字节的数据编码后需要用4个字节来表示中间补了很多0编码效率大约是75%。

假设存在 base16 编码同样的原理编码效率会只剩下50%。所以低于64的数字一般是不考虑的。

假设存在 base256 编码效率能达到100%,问题在于 “可打印” 的字符并没有256种那么多。

  • 文章目录 {:toc}