crazycloudcc@blog:~/tools/base64 — zsh — 80×24
--:--:--···
crazycloudcc@blog:~/tools/base64$ pwd
/home/crazycloudcc/blog/tools/base64
> cd ./tools/base64

~/tools / base64

Base64 编码 / 解码

文本与 Base64 互转。编码解码均在浏览器本地完成。

本地计算 · 无账号

按 UTF-8 字节做 Base64,适合中文文本。

这是什么

Base64 把任意字节序列编成只用字母、数字与少量符号的 ASCII 文本,常见于邮件附件、Data URL、令牌片段。本工具在浏览器做文本与 Base64 互转,方便检查「这一串解出来是什么」,或把短文本编成可粘贴形式。编解码均在本地完成。

原理

算法按每 3 个字节(24 bit)一组,切成 4 个 6 bit 索引,查表得到 A–Z、a–z、0–9、+、/。长度不是 3 的倍数时用 = 填充,使输出长度仍是 4 的倍数。解码则反向:去掉空白,按 4 字符一组还原字节。它不提供保密性——任何拿到编码串的人都能解码——只解决「二进制如何安全地走纯文本通道」。本页按 UTF-8 理解输入字符串再编码。和「十六进制转储」相比,Base64 更短,但仍比原文膨胀约三分之一;和压缩算法也无关——膨胀是表示形式的代价。理解分组与填充后,你就能解释为什么有的串以一个或两个等号结尾,以及为什么少写一个字符就会整组错位。

什么时候用

调试接口里的 Base64 字段、核对 Data URL 载荷、或在纯文本通道临时传递短配置时可用。不要用它「加密」密码。密钥与会话 Cookie 即使本地不上传,截图与共享屏幕仍会泄露,请谨慎粘贴。写 C/C++ 作业需要对照「某一串编码是否对应某段 UTF-8 原文」时,也可以先在本页生成期望值,再把自写编码器的输出贴进来比对,避免只在纸上推 6 bit 边界。

示例

  • 编码 ASCII
    输入:crazycloudcc
    输出:Y3JhenljbG91ZGNj
  • 解码回原文
    输入:Y3JhenljbG91ZGNj
    输出:crazycloudcc

常见错误

  • 缺填充 = 或混入换行、空格时,解码可能失败,请先清理空白。
  • URL-safe 字母表用 -_ 代替 +/,与标准 Base64 不同;本页按标准表处理。
  • 把二进制文件整份贴进文本框会撑爆内存,大文件请用本机命令行。

常见问题

这算加密吗?
不算。可逆且无需密钥,不能替代 HTTPS 或真正的加密算法。
中文乱码怎么办?
按 UTF-8 理解文本。若来源是其它编码,先在外部转成 UTF-8 再粘贴。
支持文件选择吗?
当前界面面向短文本。大文件用本机 base64 / certutil 更合适。

C++20 可用自制表做演示编码(示意)

// 示意:把 3 字节扩成 4 字符;生产请用经过测试的库
#include <cstdint>
#include <string>
#include <string_view>
constexpr std::string_view kTable =
  "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
// 完整实现需处理长度与 '=' 填充;可在 /playground 逐步补全

完整实现容易在填充边界写错。建议先用本页核对短样例,再把自测向量贴进 Playground 对照。

在 Playground 打开 · 数据只在本地处理:编码结果仅存在于当前页面状态。

branch: mainposts: 12encoding: utf-8