logo
GeekFormat

Base64 编码

输入文本
0 字符

免费在线 Base64 编码解码工具,支持 UTF-8/ASCII/ISO-8859-1 字符集,Standard/URL-Safe/MIME 三种变体。实时显示体积膨胀率,MIME 换行符合 RFC 2045 标准。

相关推荐

适用场景

  • JWT 调试:解码 JWT 的 header 和 payload 段(Base64URL 格式),查看 Token 声明内容
  • Basic Auth:编码 username:password 为 HTTP Basic 认证凭证
  • OAuth 开发:生成 PKCE 场景下的 code_verifier 或验证 code_challenge
  • API 调试:编码 JSON 数据或解码 API 返回的 Base64 字段内容
  • Data URI 内嵌图片:将小图标转为 data:image/...;base64,... 格式嵌入 CSS/HTML
  • 邮件附件编码:使用 MIME Base64 格式编码邮件二进制附件

功能特点

  • Encode/Decode 一键切换:编码和解码模式自由切换,输出直接变为输入支持循环处理
  • 三种字符集支持:UTF-8(中文/日文/emoji)、ASCII、ISO-8859-1,专业级多场景覆盖
  • 三变体输出:Standard(标准)、URL-Safe(JWT/OAuth/PKCE 安全)、MIME(RFC 2045 标准 76 字符换行)
  • 实时体积统计:实时显示输入/输出字符数和膨胀率(Base64 体积增大约 33%)
  • 友好错误提示:字符超出范围时显示具体错误信息,而非简单报错
  • 可拖拽分隔线:PC 端可调整左右编辑区比例,专注当前任务
  • 移动端独立 Tab:手机/平板用户独立切换输入区和输出区,体验流畅

使用方法

  1. 选择模式:点击 Encode(编码)或 Decode(解码)切换处理方向
  2. 选择变体:Standard(标准)、URL-Safe(JWT/OAuth)、MIME(邮件格式 76 字符换行)
  3. 输入内容:粘贴文本或 Base64 字符串,自动实时处理
  4. 查看统计:底部显示字符数和体积膨胀率(编码体积增大约 33%)
  5. 复制结果:一键复制 Base64 字符串或解码文本

常见问题

Base64 编码和加密是一回事吗?

不是。Base64 只是将文本转换为另一种可逆的表示形式,任何人都可以解码回原文。如果涉及敏感数据(密码、Token),请使用 AES 等真正的加密方案。Base64 只适合数据格式转换,便于文本系统传输二进制数据。

AES 加密工具

Base64 编码后体积会增大多少?

Base64 编码会使原始数据体积增大约 33%。这是因为每 3 个字节(24 位)被编码为 4 个 Base64 字符。例如 100 字节的文本编码后约为 133 字节。工具底部会实时显示膨胀率,方便您评估数据大小。示例:`Hello` → `SGVsbG8=`(体积 +33%)。

Base64 统计工具

Standard、URL-Safe、MIME 三种变体有什么区别?

Standard 是标准 Base64,使用 A-Z、a-z、0-9、+、/ 字符。URL-Safe 将 +/ 替换为 -_,适合 URL 参数和 JWT Token。MIME 在每 76 字符处插入换行,符合 RFC 2045 邮件传输标准,适合邮件附件和多行文本。

URL-Safe Base64MIME Base64

如何解码 JWT 的 header 或 payload?

JWT 使用 Base64URL 编码(URL-Safe 变体)。选择 URL-Safe 模式后,直接粘贴 JWT 的第一段(header)或第二段(payload)即可解码。注意 JWT 第三段是签名,不应解码验证。

JWT 工具

什么是 Base64 的 Padding(填充)?

Base64 编码结果长度必须是 4 的倍数。当输入长度不是 3 的倍数时,会用 = 字符填充。URL-Safe 变体不使用 padding。工具自动处理 padding,解码时也会自动去除 = 字符。

Base64 Padding 工具

JavaScript 中的 btoa 和 atob 为什么不支持中文?

btoa 和 atob 是浏览器原生 API,它们操作的是 Latin-1(ISO-8859-1)字符集,每个字符占 1 字节。中文字符在 UTF-8 中占 3 字节,直接传入会报错。解决方法是先用 encodeURIComponent 将中文转为 UTF-8 字节序列的 %xx 格式,再用 unescape 转为 Latin-1 字符串,最后用 btoa 编码。

什么是 Data URI Scheme?怎么用 Base64 内嵌图片?

Data URI 是一种将数据直接内嵌在 URL 中的 URI 格式,语法为:`data:[<mediatype>][;base64],<data>`。例如 `data:image/png;base64,iVBORw0KGgo...`。常用于内嵌小图标、CSS 背景图等,减少 HTTP 请求数。但 Base64 会使体积增大 33%,因此只适合小文件,大文件仍应使用普通 URL。

Data URI 工具Base64 转图片

什么是Base64 编码?

Base64 是一种基于 64 个可打印 ASCII 字符的二进制到文本的编码方案,由 RFC 2045(MIME 标准)首次定义。Base64 将每 3 个字节(24 位)转换为 4 个 Base64 字符(A-Z、a-z、0-9、+、/),使二进制数据能够安全地通过仅支持文本的系统传输,如 HTTP header、JSON 载荷、XML 文档或 URL 查询参数。

**Base64 不是加密**,它只提供数据格式转换,任何人都可以轻松解码。如果需要保护敏感数据,请使用 AES 等真正的加密方案。Base64 的典型用途包括:HTTP Basic Authentication(`Authorization: Basic dXNlcjpwYXNz`)、JWT Token 的 header 和 payload 段(Base64URL 格式)、Data URI(`data:image/png;base64,...`)、邮件附件 MIME 编码等。

**URL-Safe Base64**(RFC 4648 §5)将标准 Base64 的 +/ 替换为 -_,并通常省略 padding 的 =。这使得编码结果可以安全地出现在 URL、文件路径或 JSON 字段中。JWT Token、OAuth PKCE 的 code_verifier、AWS Signature V4 都使用 URL-Safe Base64 编码。

**MIME 折行**是 RFC 2045 规定的每行不超过 76 个字符的标准。当 Base64 内容用于电子邮件或某些需要分行展示的场景时,MIME 变体会自动在每 76 字符处插入换行符(`\n`)。这是电子邮件附件传输的标准格式。

工具使用浏览器原生的 **btoa/atob API**,配合 UTF-8 安全的处理逻辑,确保中文字符、日文 emoji 等多字节字符正确编码。所有计算在本地完成,数据不发送到任何服务器。打开浏览器开发者工具的网络面板,可以验证全程无任何外网请求。

术语表

RFC 4648
IETF 发布的 Base16/Base32/Base64 编码官方标准,定义了标准 Base64 和 URL-Safe Base64 两种字母表,以及 padding、换行、非字母表字符处理等规则。是目前 Base64 编码的事实标准,替代了早期的 RFC 3548。URL-Safe Base64 工具Base64 Padding 工具
RFC 2045 (MIME)
多用途互联网邮件扩展(MIME)标准,首次将 Base64 作为邮件内容传输编码方式。规定 Base64 编码每行不超过 76 个字符并以 CRLF 换行,即 MIME Base64 变体。MIME Base64 工具
Base64URL(URL-Safe Base64)
RFC 4648 §5 定义的 URL 安全变体。将标准 Base64 的 + 替换为 -、/ 替换为 _,并通常省略 padding 的 = 字符。广泛用于 JWT Token、OAuth PKCE、URL 参数、文件名等场景。URL-Safe Base64 工具JWT 工具
MIME Base64
符合 RFC 2045 标准的 Base64 变体,每 76 个字符插入一个换行符(CRLF)。主要用于电子邮件附件传输,因早期 SMTP 协议对单行长度有限制。MIME Base64 工具
Padding(填充)
Base64 编码结果长度必须是 4 的倍数。当输入字节数不是 3 的倍数时,末尾用 = 字符补齐。标准 Base64 使用 padding,Base64URL 通常省略 padding。Base64 Padding 工具
Base64 字母表(Alphabet)
Base64 编码使用的 64 个字符集合。标准 Base64 字母表为:A-Z(26个)、a-z(26个)、0-9(10个)、+、/,共 64 个字符,外加填充字符 =。
btoa / atob
浏览器原生的 Base64 编码/解码 API。btoa(binary to ASCII)用于编码,atob(ASCII to binary)用于解码。注意这两个 API 只支持 Latin-1 字符集,处理中文需配合 UTF-8 转码。
Data URI Scheme
一种 URI 格式,允许将小文件直接内嵌在 URL 中,格式为 data:[<mediatype>][;base64],<data>。常用于内嵌小图标、CSS 背景图等,减少 HTTP 请求。Data URI 工具Base64 转图片
HTTP Basic Authentication
HTTP 协议中的一种认证方式,将用户名和密码用冒号连接后进行 Base64 编码,放在 Authorization 请求头中传输。格式为:Authorization: Basic <base64(username:password)>。Auth Header 构建器
Base64 膨胀率
Base64 编码后数据体积增加的比例。每 3 字节(24位)编码为 4 个 Base64 字符,因此体积增大约 33%(4/3 ≈ 1.333)。加上 padding 时膨胀率会略高。

Base64 三种变体对比

特性StandardURL-SafeMIME
特殊字符+ /- _+ /
Padding(=)使用通常省略使用
换行每76字符换行
标准RFC 4648 §4RFC 4648 §5RFC 2045
典型场景Data URI、通用编码JWT、URL参数、文件名邮件附件、SMTP传输

Base 系列编码对比表

编码字符数字符集特点体积膨胀典型用途
Base16 (Hex)160-9, A-F100%调试、哈希展示
Base3232A-Z, 2-7(大写不混淆)60%DNS、TOTP密钥、QR码
Base5858去掉易混淆字符0/O/I/l38%比特币地址、加密货币
Base6262A-Z, a-z, 0-934%URL短链、ID编码
Base6464A-Z, a-z, 0-9, +, /33%Data URI、MIME、JWT(URL-Safe变体)

Code Examples

JavaScript 中的 Base64 编码(支持中文 UTF-8)

// 编码(支持 UTF-8 中文)
function b64Encode(str) {
  return btoa(unescape(encodeURIComponent(str)));
}

// 解码(支持 UTF-8 中文)
function b64Decode(str) {
  return decodeURIComponent(escape(atob(str)));
}

// URL-Safe 编码(用于 JWT / OAuth)
function b64UrlEncode(str) {
  return btoa(unescape(encodeURIComponent(str)))
    .replace(/\+/g, '-')
    .replace(/\//g, '_')
    .replace(/=+$/, '');
}

console.log(b64Encode('Hello 世界')); // SGVsbG8g5LiW55WM
console.log(b64Decode('SGVsbG8g5LiW55WM')); // Hello 世界

Python 中的 Base64 编码

import base64

# Standard 编码(UTF-8)
encoded = base64.b64encode('Hello 世界'.encode('utf-8'))
print(encoded.decode())  # SGVsbG8g5LiW55WM

# Standard 解码
decoded = base64.b64decode(encoded).decode('utf-8')
print(decoded)  # Hello 世界

# URL-Safe 编码(用于 JWT / OAuth)
url_safe = base64.urlsafe_b64encode('Hello 世界'.encode('utf-8'))
print(url_safe.decode())  # SGVsbG8g5LiW55WM(无 padding 需手动去除)

# 去除 padding(JWT 标准做法)
url_safe_no_pad = url_safe.decode().rstrip('=')
print(url_safe_no_pad)

Java 中的 Base64 编码

import java.nio.charset.StandardCharsets;
import java.util.Base64;

public class Base64Example {
    public static void main(String[] args) {
        String text = "Hello 世界";

        // Standard 编码
        String encoded = Base64.getEncoder()
            .encodeToString(text.getBytes(StandardCharsets.UTF_8));
        System.out.println(encoded); // SGVsbG8g5LiW55WM

        // Standard 解码
        String decoded = new String(
            Base64.getDecoder().decode(encoded), StandardCharsets.UTF_8);
        System.out.println(decoded); // Hello 世界

        // URL-Safe 编码(用于 JWT / URL)
        String urlSafe = Base64.getUrlEncoder().withoutPadding()
            .encodeToString(text.getBytes(StandardCharsets.UTF_8));
        System.out.println(urlSafe);

        // MIME 编码(76字符换行)
        String mime = Base64.getMimeEncoder()
            .encodeToString(text.getBytes(StandardCharsets.UTF_8));
    }
}

Authoritative References