首页/开发/正则与编码速查/Base64 填充字符规则与长度

Base64 填充字符规则与长度

Base64 的填充符 = 用来补足 4 的倍数:输入余 1 字节补两个等号、余 2 字节补一个、余 0 不补;不少场景(URL 安全变体、令牌)会省略填充,解码前必须补齐。

正则与编码速查开发更新于 2026-10-17
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌‌‌​‌‌​​​‌​​‌‌​​​​‌​‌‌‌​​‌‌​‌‌​​‌​‌​​‌‌​‌‌​​​‌‌​‌​​​​‌​‌‌​‌​‌‌‌​​​​​‌‌​​​​‌​‌‌​​‌​​​‌‌​​‌​​​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​​‌​‌‌​‌​‌‌‌​​‌​​‌‌‌​‌​‌​‌‌​‌‌​​​‌‌​​‌​‌​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​

填充规则与作用

Base64 每次处理 3 字节并输出 4 个字符,输入长度可能不是 3 的倍数,最后不足的部分就用 = 补齐,因此输出长度永远是 4 的倍数。填充的作用不是补数据,而是让解码器知道最后一组里哪些位是有效位:余 1 字节时补两个等号,余 2 字节时补一个等号。RFC 4648 允许在特定上下文中省略填充(URL 安全变体、令牌拼接),这时解码方需要自行补齐才能解出原始数据。

基本信息

余 1 字节补两个等号,输出 4 个字符
余 2 字节补一个等号,输出 4 个字符
余 0 字节无需填充
输出长度始终为 4 的倍数
省略填充场景URL 安全变体、令牌、部分接口约定
解码要求缺失填充时通常需补齐到 4 的倍数再解

典型使用场景

  • 接口联调:两端对是否保留填充约定不一致,导致解码报长度错误
  • 令牌解析:载荷与签名部分通常省略填充,需要先补齐再解码
  • 配置拼接:手工截取 Base64 片段时容易丢掉尾部等号
  • 数据校验:用长度是否为 4 的倍数快速判断内容是否完整
  • 跨语言实现:不同库对缺失填充的容忍度不同,需统一处理

填充观察与补齐

填充观察与补齐
printf 'a' | base64          # YQ==:余 1 字节,两个等号
printf 'ab' | base64         # YWI=:余 2 字节,一个等号
printf 'abc' | base64        # YWJj:整除,无填充
# 缺失填充时手动补齐(按长度对 4 取余判断要补几个等号)
python -c "s='YQ'; s += '=' * (-len(s) % 4); print(s)"      # YQ==
python -c "import base64; print(base64.b64decode('YQ==' ))"   # b'a'
# 校验完整性:长度必须是 4 的倍数
python -c "print(len('YWJj') % 4)"                           # 0 表示长度合法

填充与长度规则

输入字节数有效位情况填充符数量
16 位有效 + 2 位补零2 个等号
212 位有效 + 4 位补零1 个等号
324 位全有效无
43 字节整块 + 1 字节余2 个等号
53 字节整块 + 2 字节余1 个等号
6两个整块无
省略填充不是「更简洁的等价写法」而是另一种约定:解码端必须知道当前内容属于哪种约定。生产接口应在文档里明确「是否保留填充」,并在实现里做兼容(先尝试原样解码,失败后补齐再解)。
不要手工删改尾部的等号来「清理」数据:等号位置与数量决定最后字节的还原,丢掉或改写会导致解出的内容缺少尾部字节,且不会总是报错——它可能静默产出错误数据。
不同库的严格程度不同:有的要求长度必须是 4 的倍数,有的接受缺失填充,有的还会忽略空白字符。跨语言接口出现「一边能解一边报错」时,先检查长度与填充,再检查字母表(标准还是 URL 安全)。

易错点

  • 手工截取 Base64 时丢掉尾部等号:解码报长度错误或解出错误内容 → 用程序按长度补齐后再解码
  • 在 URL 与文件名中保留等号未做编码:等号被当作参数分隔或特殊字符,内容被截断 → 使用无填充变体或先做百分号编码
  • 两端约定不一致:一端省略填充、另一端要求严格格式,联调反复失败 → 在接口文档明确约定并实现兼容逻辑
  • 把缺失填充当成数据损坏:实际只是约定差异,误删或重新生成数据 → 先尝试补齐解码验证内容
  • 用长度校验判断内容完整性却忽略空白与换行:换行会让长度校验误判 → 先去空白再校验

数据来源与参考

  • RFC 4648:Base64 填充规则与省略填充的说明
  • RFC 7515:JWT 使用无填充 Base64URL 的约定
  • RFC 7468:PEM 文本编码格式

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/regex/base64-padding-rule.html

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌‌‌​‌‌​​​‌​​‌‌​​​​‌​‌‌‌​​‌‌​‌‌​​‌​‌​​‌‌​‌‌​​​‌‌​‌​​​​‌​‌‌​‌​‌‌‌​​​​​‌‌​​​​‌​‌‌​​‌​​​‌‌​​‌​​​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​​‌​‌‌​‌​‌‌‌​​‌​​‌‌‌​‌​‌​‌‌​‌‌​​​‌‌​​‌​‌​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​