Base64 Encoding
What is Base64?
Base64 is a binary-to-text encoding scheme. It represents binary data in a printable ASCII string format by translating it into a radix-64 representation.
Base64 encoding is commonly used when there is a need to transmit binary data over media that do not correctly handle binary data and is designed to deal with textual data belonging to the 7-bit US-ASCII charset only.
One example of such a system is Email (SMTP), which was traditionally designed to work with plain text data in the 7-bit US-ASCII character set. Although, It was later extended to support non US-ASCII text messages as well as non-text messages such as audio and images, It is still recommended to encode the data to ASCII charset for backward compatibility.
What is Base64 Encoding and How does it work?
- Base64 用 6 个 bit 来表示一个字符,输入流中每 3 个 Bytes 由 4 个 Base64 字符表示
- Base64 包含 64 个字符(26 个大写字母,26 个小写字母,10 个数字,2 个特殊字符+,/)
- Base64 常用于在 URL、Cookie、网页中传输少量二进制数据。
How does Base64 Encoding work?
Base64 encoding works with a 65-character subset of the US-ASCII charset. The first 64 characters out of the 65-character subset are mapped to an equivalent 6-bit binary sequence $2^6 = 64$. The extra 65th character (=) is used for padding.
Steps
- 以 6 bit 为单位将二进制数据分组,不足 6 个 bit 的在末尾补 0,得到 8 组二进制数据:
以 ASCII 编码的字符串HelloWorld\n
为例,其二进制数据为:01001000 01100101 01101100 01101100 01101111 01010111 01101111 01110010 01101100 01100100 00001010
分组后为:010010 000110 010101 101100 011011 000110 111101 010111 011011 110111 001001 101100 011001 000000 1010
- 将各组二进制转成十进制,根据映射关系得到 Base64 编码
- 将 Base64 编码拼接起来,最终结果应为 4 的倍数,不足则在末尾补
=
SGVs bG9X b3Js ZAO=
Why Base64?
在早期的互联网协议中,设计者们主要考虑的是发送文本数据,因此这些协议通常只能处理 ASCII 字符集中的字符。然而,二进制文件(如图片、音频、视频等)包含的数据通常超出了 ASCII 字符集的范围。如果直接发送这些二进制数据,可能有部分字节被解释为控制字符,例如换行符、回车符、制表符等。这些控制字符在传输过程中可能会被解释为其他含义,从而导致数据传输错误。
Base64 编码出现是为了就是解决在网络上发送二进制数据的问题。Base64 选取 US-ASCII 中的64 个可打印字符作为编码后的字符集,这样就可以保证数据在传输过程中不会被解释为控制字符,从而确保数据传输的安全和可靠。
不过,Base64 编码会导致数据膨胀,大约增加 1/3 的大小。
Base64’s Applications
Base64 的应用非常广泛,包括但不限于:
电子邮件:在 MIME(多用途互联网邮件扩展)协议中,Base64 用于编码电子邮件的附件,使其可以通过电子邮件系统发送。电子邮件系统主要设计用于处理文本,而不是二进制数据,因此需要将二进制附件(如图片或文档)转换为文本格式。
数据 URI:在网页中,可以使用 Base64 编码的数据 URI 来内嵌图片或其他资源。这样可以减少 HTTP 请求的数量,从而提高页面加载速度。数据 URI 的格式为
data:[<mediatype>][;base64],<data>
,其中是资源的 MIME 类型,是 Base64 编码的资源数据。 URL 编码:在某些情况下,URL 可能需要包含二进制数据。由于 URL 只能包含 ASCII 字符,因此需要使用 Base64 编码来编码这些数据。标准的 Base64 编码在 URL 中有特殊含义的字符(+ 和 /),于是 + 和 / 分别被替换为 - 和 _。
证书和密钥:在 SSL/TLS 和其他安全协议中,证书和密钥通常使用 Base64 编码,以便在文本格式的配置文件中使用。这样可以避免二进制数据在处理或传输过程中可能出现的问题。
编码用户凭据:在 HTTP 基本认证中,用户的用户名和密码会被拼接成一个字符串,然后使用 Base64 编码,最后将编码后的字符串放在 HTTP 头的 Authorization 字段中发送给服务器。
Base64 Encoding