Base64 不是加密

Base64 的任务是把二进制数据表示为一组容易传输的 ASCII 字符。它没有密钥,任何拿到结果的人都能解码,因此不能用来保护密码、令牌或私人信息。

主题:编码基础最后核对:2026-07-24

编码过程发生了什么

文本首先按某种字符编码转换成字节。本站工具固定使用 UTF-8,再把每 3 个字节拆成 4 组 6 bit 数值,映射到 Base64 字符表。末尾字节不足时会出现一个或两个 = 填充符。填充符属于格式的一部分,但部分系统会省略它。

可复现示例你好 的 UTF-8 字节为 E4 BD A0 E5 A5 BD,Base64 结果为 5L2g5aW9。把该结果粘贴回解码框,会得到原文“你好”。

为什么有时解码后是乱码

Base64 只负责还原字节,不记录原始文本使用 UTF-8、GBK 还是其他字符集。如果发送方用 GBK 生成字节,接收方却按 UTF-8 解释,即使 Base64 本身完全正确,显示结果仍会乱码。排查时应先确认数据来源声明的字符集。

适合与不适合的场景

场景是否适合原因
在 JSON 中传递少量二进制数据适合能够避免控制字符破坏文本协议,但体积通常增加约三分之一。
邮件或旧协议中的附件表示适合Base64 只使用有限字符集,跨系统传输更稳定。
保存密码不适合编码可直接逆转,应使用专门的密码哈希方案。
隐藏 API Token不适合任何获得编码结果的人都可以还原 Token。
安全提醒不要因为结果看起来不可读就把它视为安全。需要保密时应使用经过审查的加密方案,并妥善管理密钥。

常见问题

末尾没有等号还能解码吗?

有些实现允许省略填充,但并非所有系统都兼容。跨系统传输时,优先保留标准填充并遵循接口文档。

Base64 会压缩数据吗?

不会。它通常使数据变大,压缩应在 Base64 编码之前完成。

为什么网址里的 Base64 会出错?

标准 Base64 中的 +/= 在 URL 中有特殊含义。应使用 Base64URL 规范或再做正确的 URL 参数编码。