Base64 使用 64 个可打印字符(A-Z、a-z、0-9、+、/)来表示二进制数据。 由于 2^6 = 64,Base64 以 6 位为一组进行编码。
在许多场景需要以文本方式传输或存储二进制数据,例如 URL、JSON、表单、邮件等。 Base64 只包含可打印字符,并避免字符串终止符 \0,防止二进制被当作字符串时被截断。
= 作为填充:== 结尾;余 2 字节 → 以 = 结尾。| 值 | 字符 | Value | Char | Value | Char | Value | Char |
|---|---|---|---|---|---|---|---|
| 0 | A | 16 | Q | 32 | g | 48 | w |
| 1 | B | 17 | R | 33 | h | 49 | x |
| 2 | C | 18 | S | 34 | i | 50 | y |
| 3 | D | 19 | T | 35 | j | 51 | z |
| 4 | E | 20 | U | 36 | k | 52 | 0 |
| 5 | F | 21 | V | 37 | l | 53 | 1 |
| 6 | G | 22 | W | 38 | m | 54 | 2 |
| 7 | H | 23 | X | 39 | n | 55 | 3 |
| 8 | I | 24 | Y | 40 | o | 56 | 4 |
| 9 | J | 25 | Z | 41 | p | 57 | 5 |
| 10 | K | 26 | a | 42 | q | 58 | 6 |
| 11 | L | 27 | b | 43 | r | 59 | 7 |
| 12 | M | 28 | c | 44 | s | 60 | 8 |
| 13 | N | 29 | d | 45 | t | 61 | 9 |
| 14 | O | 30 | e | 46 | u | 62 | + |
| 15 | P | 31 | f | 47 | v | 63 | / |
若字节数不是 3 的倍数,编码前在末尾补 0 位:
余 1 字节 → 追加 ==;余 2 字节 → 追加 =。
示例 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==
| 语言 | 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 |