1 选好编码
2 贴进来
3 把结果带走
# Base64 编码解码 — 还有 URL、HTML 实体、十六进制和转义 Base64、百分号编码、HTML 实体、十六进制和反斜杠转义,双向都行。没有一个字被贴进别人的服务器。 > 用两套字母表编码和解码 Base64,给 URL 做百分号编码,转义 HTML 实体,读十六进制和反斜杠转义。全都在你的浏览器里跑,什么都不上传——token 从不离开你的机器。 这是一个浏览器交互工具,地址是 https://abox.tools/zh/base64/。文件在运行该浏览器的设备上处理。主动分享和可选联网功能都在页面上说明。下文是它的文字说明;使用工具请打开该地址。 ## 你的文本**在浏览器里处理**,无须上传处理。 这里的每一种编码都是对一串字符做算术,就在这个页面里做完。编解码器是手写的,都在 `src/encode.js` 里;此外别无他物。这个工具没有任何形式的网络功能,没有什么可取,也没有什么可发。这一点几乎在哪儿都不如在这里要紧:人们往在线 Base64 解码器里贴的是 token,而把 token 贴进别人的网站,等于把它交了出去。 - ✗ 不上传 - ✗ 不注册 - ✗ 无大小限制 - ✓ 断网可用 - ✓ 开源 ## 怎样在不上传的前提下编码或解码 Base64 1. **选好编码。** 两套字母表的 Base64、给单个值或整个 URL 用的百分号编码、五个 HTML 实体、十六进制字节,以及字符串字面量里的反斜杠转义。菜单下面的说明写着每一种是干什么用的。 2. **选好方向。** “编码”接收明文,产出编码后的形式;“解码”把编码后的形式还原成明文。结果跟着你的输入走:换个方向只是一次点击,什么都不用重敲。 3. **贴进来,或者把文件拖进来。** 凡是你能选中并复制的都行。拖到选择框上的文件由你自己的浏览器读进输入框:这里根本没有可省略的上传步骤。 4. **有错误就读一读。** 在这里失败的解码器会说出它遇到了什么——Base64 不用的字符、填充放错了地方、不是文本的字节——而不是返回一个貌似像样却错了的结果。 5. **把结果带走。** 复制它,或者下载成文本文件。输入框下面的计数会告诉你进了多少字节、出了多少字节。 ## 说得更细的版本 [Base64 算加密吗?](https://abox.tools/zh/guides/is-base64-encryption/): 不算。而且这个区别在实际里很要命。编码、加密、哈希解决的是三个不同的问题:第一个谁都能还原,第二个持有密钥的人能还原,第三个谁也还原不了。哪个是哪个,一眼怎么认。 ## 工具箱里还有 - [文本与文件分享](https://abox.tools/zh/share-text/): 分享只活在这个打开的标签页里。读的人从你的浏览器直接取走加密内容,关掉标签页就结束——任何服务器上都不留一点东西。 - [二维码与条形码生成](https://abox.tools/zh/qr-barcode/): 打进去,就变成一个码。生成过程不往外送任何东西。 - [二维码与条形码识读](https://abox.tools/zh/qr-barcode-reader/): 把摄像头对准码,或者把拍下来的图丢进来。读这件事只发生在这里,别处都没有。 - [哈希与校验和](https://abox.tools/zh/hash-checksum/): 把下载来的文件和发布方公布的那串数字对一下,不用把它发给任何人。 ## 常见问题 ### 我的文本会被传到哪里去吗? 不会。这个页面上的每个编码器和解码器,都是在你自己的浏览器里、你自己的硬件上运行的函数。这个工具没有任何形式的网络功能:它从不去取什么,也从不发出什么;页面的 `Content-Security-Policy` 里写着它允许联系的每一个地址,没有一个属于本站。这正是拿它来处理访问令牌或会话 cookie 的理由:把这类东西贴进别人的解码器,等于把它交给了对方。 ### 这里的 Base64 和别处的 Base64 一样吗? 一样——它是拿 RFC 4648 的测试向量来核对的,而不是拿自己核对自己。两套字母表都能解码,所以用 `-` 和 `_` 写的 JWT,和用 `+` 和 `/` 写的一样好读;按 64 个字符折行的输入,会替你接回去。编码走的是 UTF-8 字节,所以带重音的字母或者 emoji 一来一回都安然无恙。 ### Base64 是加密吗? 不是,把它当加密正是经典的误会。Base64 是一种写法:同样的字节,换一套能在 URL、邮件或 JSON 字符串里活下来的字母表写出来。谁都能把它读回去——这个页面一毫秒就做到了——所以它什么都藏不住,什么都保护不了。你手里的东西要是机密,那它需要的是编码之前的真加密,而不是拿编码来顶替。 ### 为什么解码失败了? 因为贴进来的东西和编解码器以为的不完全是一回事,错误信息会说清差在哪儿:Base64 字母表之外的字符、放错位置的填充、后面没跟两位十六进制数的百分号,或者能从 Base64 解出来、却不是 UTF-8 文本的字节——最后这种通常说明原始内容是个文件,不是字符串。换成浏览器自带的 `atob`,它会返回一个貌似像样的结果;而能被告知哪里不对,正是把东西贴进解码器的全部意义。 ### 两种网址编码有什么区别? 一个值,还是整个地址。编码“单个值”会转义 URL 赋予了含义的一切——斜杠、问号、和号——这正是查询串里单个参数需要的。编码“整个 URL”则让地址继续能用:斜杠和 `?` 留着,只转义 URL 根本带不动的字符。拿前者去编码整个地址,地址就坏了;拿后者去编码一个值,就分不清值到哪儿结束。 ### 它能处理多大的文件? 这里没有设上限,因为没有哪台服务器在为上限掏钱。真正的天花板是你自己的机器:几兆字节的文本没问题;文档特别长的时候,页面会等你敲字停一下再重新编码,而不是跟你抢键盘。 ### 它免费吗,需要注册吗? 免费,没有账号,不用登录,没有试用期,贴多少也没有上限。本站带广告,经费就是从那儿来的,广告拿不到任何关于你文本的信息。 ### 断网能用吗? 能。页面加载一次之后断开网络,它照样干活。这也是证明“什么都没上传”最省事的办法,真要把你的文本送出去解码,拔线那一刻就停了。 ## 这条隐私承诺怎么核实 - **处理在这个浏览器里完成。** 本工具在浏览器里处理输入和结果,处理代码不把它们上传去处理。Content-Security-Policy 限制可用资源和连接目的地,但已允许的主机仍可接收请求。策略不检查载荷,不能单独证明什么都没有发出。请把具体操作的请求与源码核对,或断网完成该本地操作。 - **这里不会去取任何东西。** 整个 `src/` 里没有 `fetch`,没有 `XMLHttpRequest`,也没有 `sendBeacon`。每个编码器和每个解码器,都是这个页面里接收一串字符、返回一串字符的函数。 - **有什么不对,解码器会告诉你。** 浏览器自带的 `atob` 会接受本该拒绝的输入,然后返回一个貌似像样的结果。这里的 Base64 是手写的,用 RFC 4648 的测试向量验证;你贴的不是 Base64 时它会说出来,还会说出原因。`tests/js/text-encode.test.js` 里的测试验证的正是这一点。 - **Google 加载了什么,又拿不到什么。** 广告脚本和统计脚本来自 Google,捐助按钮来自 Buy Me a Coffee。你的文本,一个字符也没有交给它们。读取、解析、写出文本的每一行代码都由这个源提供,也都摆在仓库里。 - **断网也照样能用。** 断开网络,这个工具跟原来一模一样,因为它里面从来就没有联网这一步。这是最省事的一条证明。 **你可以自己核对。**上面这些不用你信。这个页面是仓库里的模板和配置生成出来的,构建脚本你能读,也能自己跑一遍,跑出来的结果就提交在 `dist` 分支上。拿实际发给你的内容,跟你自己从源码构建出来的结果对一遍就知道了: https://github.com/A-Box-of-Tools/website 最值得先读的几个文件:`config/site.toml` 里是 Content-Security-Policy,还有 `src/encode.js`:这里的 Base64 用 RFC 4648 的测试向量来验证,而不是拿自己验自己;坏输入直接拒绝,而不是像 `atob` 那样返回一个貌似像样的结果。
怎样在不上传的前提下编码或解码 Base64
- 选好编码。两套字母表的 Base64、给单个值或整个 URL 用的百分号编码、五个 HTML 实体、十六进制字节,以及字符串字面量里的反斜杠转义。菜单下面的说明写着每一种是干什么用的。
- 选好方向。“编码”接收明文,产出编码后的形式;“解码”把编码后的形式还原成明文。结果跟着你的输入走:换个方向只是一次点击,什么都不用重敲。
- 贴进来,或者把文件拖进来。凡是你能选中并复制的都行。拖到选择框上的文件由你自己的浏览器读进输入框:这里根本没有可省略的上传步骤。
- 有错误就读一读。在这里失败的解码器会说出它遇到了什么——Base64 不用的字符、填充放错了地方、不是文本的字节——而不是返回一个貌似像样却错了的结果。
- 把结果带走。复制它,或者下载成文本文件。输入框下面的计数会告诉你进了多少字节、出了多少字节。
说得更细的版本
Base64 算加密吗? 不算。而且这个区别在实际里很要命。编码、加密、哈希解决的是三个不同的问题:第一个谁都能还原,第二个持有密钥的人能还原,第三个谁也还原不了。哪个是哪个,一眼怎么认。
工具箱里还有
常见问题
我的文本会被传到哪里去吗?
不会。这个页面上的每个编码器和解码器,都是在你自己的浏览器里、你自己的硬件上运行的函数。这个工具没有任何形式的网络功能:它从不去取什么,也从不发出什么;页面的 Content-Security-Policy 里写着它允许联系的每一个地址,没有一个属于本站。这正是拿它来处理访问令牌或会话 cookie 的理由:把这类东西贴进别人的解码器,等于把它交给了对方。
这里的 Base64 和别处的 Base64 一样吗?
一样——它是拿 RFC 4648 的测试向量来核对的,而不是拿自己核对自己。两套字母表都能解码,所以用 - 和 _ 写的 JWT,和用 + 和 / 写的一样好读;按 64 个字符折行的输入,会替你接回去。编码走的是 UTF-8 字节,所以带重音的字母或者 emoji 一来一回都安然无恙。
Base64 是加密吗?
不是,把它当加密正是经典的误会。Base64 是一种写法:同样的字节,换一套能在 URL、邮件或 JSON 字符串里活下来的字母表写出来。谁都能把它读回去——这个页面一毫秒就做到了——所以它什么都藏不住,什么都保护不了。你手里的东西要是机密,那它需要的是编码之前的真加密,而不是拿编码来顶替。
为什么解码失败了?
因为贴进来的东西和编解码器以为的不完全是一回事,错误信息会说清差在哪儿:Base64 字母表之外的字符、放错位置的填充、后面没跟两位十六进制数的百分号,或者能从 Base64 解出来、却不是 UTF-8 文本的字节——最后这种通常说明原始内容是个文件,不是字符串。换成浏览器自带的 atob,它会返回一个貌似像样的结果;而能被告知哪里不对,正是把东西贴进解码器的全部意义。
两种网址编码有什么区别?
一个值,还是整个地址。编码“单个值”会转义 URL 赋予了含义的一切——斜杠、问号、和号——这正是查询串里单个参数需要的。编码“整个 URL”则让地址继续能用:斜杠和 ? 留着,只转义 URL 根本带不动的字符。拿前者去编码整个地址,地址就坏了;拿后者去编码一个值,就分不清值到哪儿结束。
它能处理多大的文件?
这里没有设上限,因为没有哪台服务器在为上限掏钱。真正的天花板是你自己的机器:几兆字节的文本没问题;文档特别长的时候,页面会等你敲字停一下再重新编码,而不是跟你抢键盘。
它免费吗,需要注册吗?
免费,没有账号,不用登录,没有试用期,贴多少也没有上限。本站带广告,经费就是从那儿来的,广告拿不到任何关于你文本的信息。
断网能用吗?
能。页面加载一次之后断开网络,它照样干活。这也是证明“什么都没上传”最省事的办法,真要把你的文本送出去解码,拔线那一刻就停了。