上传文件
  1. base64hub
  2. Web 与令牌工具
  3. Base64URL 解码器

Base64URL 解码器:解码 URL 安全的 Base64

粘贴 URL 安全的 Base64 字符串,例如令牌的某一段或 URL 参数,查看其中的内容。- 和 _ 字符会被自动识别,缺失的 = 填充也会自动补上。

免费 无需注册,不限次数 本地 不上传任何内容 自动 补全填充 更新于 2026年10月27日
输入 0 B输出 0 B大小 –

在你的浏览器中处理。此页面无法将你的数据发送到任何地方: 我们如何确认

如何解码 Base64URL

  1. 把字符串粘贴到 输入 · Base64。页面打开时已载入一个 URL 安全的示例。
  2. 在 输出 · 文本 中查看结果。状态行会显示变体(Base64URL 或标准)、解码后的字节数和检测到的类型。如果缺少填充,会提示“已自动补全缺失的填充。”
  3. 令牌里通常是 JSON,格式化 JSON 会将其缩进显示。
  4. 对于哈希值、随机 ID 等二进制内容,工具会提示这是二进制数据,并给出对应解码器的链接。
  5. 用 复制输出 或 下载 获取结果。

要编码,请使用 Base64URL 编码器。要在不解码的情况下把 Base64URL 字符串转换为标准 Base64,请使用 Base64URL 转 Base64。

示例

Base64URL解码结果说明
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9{"alg":"HS256","typ":"JWT"}典型的 JWT 头部
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkFkYSIsImFkbWluIjp0cnVlfQ{"sub":"1234567890","name":"Ada","admin":true}JWT 载荷;已补全填充
c3ViamVjdHM_X2Qsubjects?_d_ 是 URL 安全版的 /
8J-Riw👋- 是 URL 安全版的 +
E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM32 个二进制字节SHA-256 哈希,RFC 7636 中的 PKCE 示例

对于最后一行的哈希,文本输出没有意义。请在 Base64 转 hex 中打开,以 13 d3 1e 96 ... 的形式查看字节。

填充,以及为什么可以补全

Base64URL 通常不写 =。这不会丢失任何信息:有效字符串的长度一定是 4n、4n + 2 或 4n + 3 个字符,余数会告诉解码器最后一组里有一个还是两个字节。工具会在解码前补上缺失的 =,并在状态行中说明。

长度为 4n + 1 的情况永远不会出现。如果看到错误“长度错误:多了或少了一个字符”,说明复制该值时丢失或多出了一个字符,例如在邮件或日志的换行处。填充详解 给出了具体的计算过程。

很多标准解码器没有这么宽容。浏览器中的 atob() 遇到 - 和 _ 会抛出 InvalidCharacterError,Python 的 base64.urlsafe_b64decode 在缺少 = 时会抛出 Incorrect padding。

令牌、Cookie 和 URL 参数

  • JWT。 令牌形如 xxxxx.yyyyy.zzzzz。前两部分是 Base64URL 编码的 JSON,第三部分是签名,属于二进制数据。可以在这里逐段解码,也可以把整个令牌粘贴到 JWT 解码器,它还会显示过期时间并验证签名。JWT 中的 Base64 讲解了这种格式。
  • Cookie 和会话 ID。 一些框架的会话 Cookie(例如 Flask)用点号把 Base64URL 数据和签名连在一起。只解码数据部分即可。
  • URL 参数。 OAuth 的 state、重定向目标和分享链接有时会携带 Base64URL 编码的 JSON。如果值中包含 %2F 或 %2B,说明它外面还套了一层百分号编码,需要先做 URL 解码。

如果字符串中 - 或 _ 与 + 或 / 混用,解码器会停下并提示“输入混用了标准(+ /)和 URL 安全(- _)字符”。这通常说明两个值被拼在了一起,或者某个值只转换了一部分。

在代码中解码 Base64URL

// Node.js
Buffer.from("c3ViamVjdHM_X2Q", "base64url").toString("utf8");   // "subjects?_d"

// Browsers with Uint8Array.fromBase64
new TextDecoder().decode(Uint8Array.fromBase64("c3ViamVjdHM_X2Q", { alphabet: "base64url" }));
import base64

def b64url_decode(s: str) -> bytes:
    return base64.urlsafe_b64decode(s + "=" * (-len(s) % 4))

b64url_decode("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9")   # b'{"alg":"HS256","typ":"JWT"}'

补填充的那一行适用于任何合法的 Base64 长度。详见 Node.js 中的 Base64、JavaScript 和 Python。

常见问题

怎么解码 Base64URL?

粘贴到上方即可,不需要任何设置。在代码中,把 - 换成 +、_ 换成 /,补上 = 直到长度是 4 的倍数,再按普通 Base64 解码;或者使用 URL 安全的解码器,例如 Node 的 Buffer.from(s, "base64url")。

为什么提示字符“.”有错误?

你粘贴的是整个 JWT。它的三个部分用点号分隔,每一部分都要单独解码。请只粘贴其中一部分,或者用 JWT 解码器 解码完整令牌。

为什么我的 Base64URL 字符串在状态行中显示为标准?

该字符串中没有 -、_、+ 或 /,因此在两种字母表中都有效,不管按哪种解码结果都一样。很多 JWT 头部都是这样。

值仍然带有百分号编码怎么办?

编码过的 =(%3D)会被自动处理。其他转义序列(例如 %2F)说明该值经过了 URL 编码,请先用 URL 解码器 处理。