Base64 是什么,以及它不是什么
Base64 把每三个字节写成四个字符,字符取自 64 个符号:A–Z、a–z、0–9,再加 `+` 和 `/`。三个字节是 24 位,四个字符正好容纳 24 位,因此信息一位不丢,只是输出比输入长了整整三分之一。末尾用 `=` 补齐,让总长度成为 4 的倍数,解码器才知道在哪里停下;输入长度不是 3 的倍数时,这段填充就是必需的。
它是编码,不是加密,这个区别很关键:任何人拿到 Base64 都能一步解码,既不需要密钥,也不需要额外工具。它存在的原因是有些通道只能传文本、不能传字节,而不是为了隐藏内容。用 Base64 写的密码、令牌或私钥,和明文一样可读;把秘密塞进 URL 之前,这一点尤其值得记住。
字母表正是 URL 安全变体存在的原因。`+` 和 `/` 在查询字符串与文件名里有特殊含义,所以 RFC 4648 定义了第二套字母表,把它们换成 `-` 和 `_`,并去掉填充。JWT 的各个部分用的就是这套,任何需要在链接里完整传输的 Base64 也一样。这个页面两种字母表都接受,选择只影响输出。