更新日期: 2024-12-12
Base64 是一种用于将二进制数据转换为文本格式的编码方式。它广泛用于在网络传输中表示二进制数据,如电子邮件附件、Web 数据传输等。由于 Base64 编码后的数据仅由 ASCII 字符集中的字符组成,因此它特别适用于在文本系统中传输二进制数据。
Base64 编码通过将每三个字节的数据转换为四个 ASCII 字符(每个字符表示 6 位二进制数据)来对数据进行编码。每个 Base64 编码字符表示的实际数据比原始数据少,因此它比原始数据的长度大约增加了 33%。
1. 将输入数据按 3 字节(24 位)分成一组。
2. 将每 24 位分成 4 个 6 位的小块。
3. 每个 6 位的小块对应一个字符,生成 Base64 编码。
Base64 使用一个固定的字符集来表示编码后的数据:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
这 64 个字符可以表示 6 位二进制数据,因此称为 Base64 编码。
解码过程是编码的逆过程。它将 Base64 编码的数据转换回原始的二进制数据。具体步骤如下: 1. 将 Base64 编码的字符串分割成 4 个字符一组。 2. 将每个字符映射回 6 位二进制数据。 3. 将这些二进制数据重新组合成 8 位(字节)一组,得到原始数据。
1. 邮件附件传输:在电子邮件中传输二进制文件(如图片、PDF 文件等)时,经常使用 Base64 编码。
2. 数据 URL:在 Web 开发中,将图片等文件以 Base64 编码嵌入 HTML 或 CSS 中作为数据 URL。
3. API 请求:在一些 API 请求中,二进制数据(如图像、文件)可能会使用 Base64 编码传输。
假设我们有一个字符串 hello,我们将其进行 Base64 编码:
原始数据:hello Base64 编码:aGVsbG8=
将 Base64 编码的字符串 aGVsbG8= 解码回原始数据:
Base64 编码:aGVsbG8= 解码结果:hello
编码:
const encoded = btoa("hello"); // 编码
console.log(encoded); // 输出: aGVsbG8=
解码:
const decoded = atob("aGVsbG8="); // 解码
console.log(decoded); // 输出: hello
编码:
import base64
encoded = base64.b64encode("hello".encode()) # 编码
print(encoded.decode()) # 输出: aGVsbG8=
解码:
decoded = base64.b64decode("aGVsbG8=").decode() # 解码
print(decoded) # 输出: hello
优点:
• 易于转换为文本格式:Base64 编码后的数据是可打印的 ASCII 字符,这使得它能方便地通过文本协议传输。
• 广泛应用:被广泛支持,几乎所有编程语言和协议都支持 Base64 编码和解码。
缺点:
• 占用空间:Base64 编码后的数据比原始数据多约 33%。因此,Base64 编码的输出比原始数据大,不适用于需要大量存储或频繁传输大文件的场景。
• 不加密:Base64 编码并不是加密方式,它仅仅是数据的编码方式,无法提供安全性保障。
通过 Base64 编码和解码,我们可以方便地在网络上传输二进制数据,但也应根据具体情况选择是否使用,因为它会增加数据的大小。