Base64 基础

1. 什么是 Base64 编码

Base64 使用 64 个可打印字符(A-Z、a-z、0-9、+、/)来表示二进制数据。 由于 2^6 = 64,Base64 以 6 位为一组进行编码。

2. 为什么使用 Base64

在许多场景需要以文本方式传输或存储二进制数据,例如 URL、JSON、表单、邮件等。 Base64 只包含可打印字符,并避免字符串终止符 \0,防止二进制被当作字符串时被截断。

3. 编码规则(要点)

Base64 索引表

字符 Value Char Value Char Value Char
0A16Q32g48w
1B17R33h49x
2C18S34i50y
3D19T35j51z
4E20U36k520
5F21V37l531
6G22W38m542
7H23X39n553
8I24Y40o564
9J25Z41p575
10K26a42q586
11L27b43r597
12M28c44s608
13N29d45t619
14O30e46u62+
15P31f47v63/

若字节数不是 3 的倍数,编码前在末尾补 0 位: 余 1 字节 → 追加 ==;余 2 字节 → 追加 =

4. 示例

示例 1: 字节 0 1 2
二进制:0011 0000 · 0011 0001 · 0011 0010 → 每 6 位分组 → 12, 3, 4, 50 → 字符 M D E y
结果:MDEy

示例 2(带填充): 字节 0 1 2 3
分组:12, 3, 4, 50, 12, 48(末尾补 0)→ 字符 M D E y M w
结果:MDEyMw==

5. Base64 encode/decode across languages

语言 Base64 编码 Base64 解码
Java base64 = new BASE64Encoder().encode(str.getBytes()); str = new String(new BASE64Decoder().decodeBuffer(base64));
JavaScript base64 = btoa(str);
var s = CryptoJS.enc.Utf8.parse(str);
base64 = CryptoJS.enc.Base64.stringify(s);
str = atob(base64);
var s = CryptoJS.enc.Base64.parse(base64);
str = s.toString(CryptoJS.enc.Utf8);
PHP $base64 = base64_encode($str); $str = base64_decode($base64);
C#/.NET byte[] bytes = System.Text.Encoding.UTF8.GetBytes(str);
base64 = System.Convert.ToBase64String(bytes);
byte[] bytes = System.Convert.FromBase64String(base64);
str = System.Text.Encoding.UTF8.GetString(bytes);
Python import base64\nbase64 = base64.b64encode(str) import base64\nstr = base64.b64decode(base64)
Perl use MIME::Base64;\n$base64 = encode_base64($str); use MIME::Base64;\n$str = decode_base64($base64);
Golang import b64 "encoding/base64" import b64 "encoding/base64"\nstr := b64.StdEncoding.DecodeString(base64)
Ruby require "base64"\nbase64 = Base64.encode64(str) require "base64"\nstr = Base64.decode64(base64)
MySQL/MariaDB SELECT TO_BASE64(str); SELECT FROM_BASE64(base64);
PostgreSQL SELECT encode(str, 'base64'); SELECT decode(base64, 'base64');
Linux Shell $ echo test | base64 $ echo dGVzdA== | base64 -d