Base64 不是加密
Base64 的任务是把二进制数据表示为一组容易传输的 ASCII 字符。它没有密钥,任何拿到结果的人都能解码,因此不能用来保护密码、令牌或私人信息。
编码过程发生了什么
文本首先按某种字符编码转换成字节。本站工具固定使用 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 参数编码。