MiServe DevTools

我的贴纸

把工具固定在这里,会保存在此浏览器中。

Base64 编码 / 解码

把文本或文件编码为 Base64,也能解码还原,支持 URL 安全字母表、可选填充和 MIME 换行。

在浏览器中运行。粘贴的内容不会被上传。

关于此工具

什么是 Base64

Base64 用 64 个可打印的 ASCII 字符表示任意字节:A–Z、a–z、0–9、+ 和 /。每 3 个字节变成 4 个字符;输入长度不是 3 的倍数时,用 = 填充最后一组。它的定义见 RFC 4648。

它的用途是让二进制数据能通过为文本设计的通道传输:电子邮件附件、HTML 和 CSS 中的 data: URI、JSON 中的二进制字段、HTTP 的 Authorization: Basic 请求头,以及已签名 JWT 的三个部分。

Base64 是一种编码,不是加密。任何人都能解码,所以它什么也藏不住。

常见的几种变体

URL 安全字母表用 - 和 _ 代替 + 和 /,这样值可以直接放进 URL 或文件名,无需转义。JWT 使用这种字母表,并且还会去掉填充。

MIME(RFC 2045)把输出拆成每行最多 76 个字符。data URI 在数据前面加上媒体类型,例如 data:image/png;base64,…,使用的是标准字母表,而不是 URL 安全字母表。

解码时,此工具两种字母表都接受,也能处理缺少填充以及含有空格、制表符和换行的情况,并会跳过 data:…;base64, 前缀。如果有无效字符,它会指出是哪个字符以及所在位置。

文本、字节和文件

Base64 编码的是字节,所以文本必须先转换成字节。此工具使用 UTF-8,这是如今大多数系统默认采用的编码。JavaScript 自带的 btoa() 只接受 U+00FF 以内的字符,遇到其他字符就会抛出异常,所以把 emoji 直接传给 btoa() 的代码会出错。像 é 这样的字母不会引发异常,但 btoa() 会把它编码成一个 Latin-1 字节,而不是 UTF-8 使用的两个字节。

解码后,工具会检查这些字节是否为不含控制字符的有效 UTF-8 文本。如果不是,它会给出提示,根据开头的字节识别 PNG、JPEG、GIF、WebP、PDF 和 ZIP 数据,并让你把这些字节下载为文件。你选择的文件由浏览器读取,不会离开你的设备。

常见问题

Base64 是一种加密方式吗?

不是。Base64 是一种可逆的编码,没有密钥,任何人都能解码。不要用它来保护密码、令牌或个人数据。

为什么 Base64 输出比输入大?

每个 Base64 字符只承载 6 位而不是 8 位,所以每 3 个字节需要 4 个字符。结果比原始数据大约多出三分之一,另外还要加上填充和换行。

Base64 和 base64url 有什么区别?

base64url 是 RFC 4648 第 5 节定义的变体。它用 - 和 _ 代替 + 和 /,并且通常省略 = 填充,因此可以安全地用在 URL 和文件名中。数据本身相同,只有这几个字符不同。此工具两种都能解码。

我编码的文件会被上传吗?

不会。文件由你的浏览器读取,并在你的设备上完成编码,不会发送到服务器。

编码分类的其他工具