Base85 编码器和解码器
Base85 会把 4 个字节压缩成 5 个 ASCII 字符,比 Base64 的「3 字节换 4 字符」比例更紧凑,因为它使用 85 个字符的字符集而不是 64 个。Adobe 的 Ascii85 变体存在于每个 PostScript 和 PDF 文件中;较新的 Z85(ZeroMQ)变体则避开了会在 C 语言字符串和 XML 中出问题的字符。本工具可对两者进行编码和解码,并可选择是否添加分隔符。
如何转换 Base85
-
1
选择变体
PDF/PostScript 素材用 Ascii85;源代码和网络协议用 Z85。
-
2
粘贴文本或上传文件
编码方向接受原始字节;解码方向接受 Base85 字符串。
-
3
编码器按每 4 个字节分块
每个 4 字节块会变成 5 个字符的 Base85 字符串。最后一块会先填充,再截去末尾多余部分。
-
4
复制结果
Ascii85 可选择用 `<~` 和 `~>` 分隔符包裹;Z85 不使用分隔符。
大小开销对比
| 编码 | 每 4 字节字符数 | 相对二进制的开销 |
|---|---|---|
| Hex | 8 | +100% |
| Base64 | 5.33(含填充时向上取整为 8) | +37% |
| Base85 | 5 | +25% |
| 原始二进制 | 4 | 0 |
因此 1 MB 二进制会变成 1.25 MB 的 Base85、1.33 MB 的 Base64、2 MB 的 hex。
Ascii85 与 Z85 的字符集
Ascii85(RFC 1924 / Adobe):ASCII 中 ! 到 u 的字符(33-117),并使用 z 作为 4 个零字节的简写。用于 PostScript 和 PDF 流中,形式为 <~...~>。
Z85(ZeroMQ):一个避开引号字符和转义字符的子集:
0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-:+=^!/*?&<>()[]{}@%$#
可安全嵌入 JSON、XML、C 语言字符串和源代码,无需转义。
计算原理
每 4 个字节会被读作一个大端(big-endian)32 位整数 N。输出的 5 个字符是 N 在 85 进制下的各位数字,最高位在前。85^5 = 4 437 053 125,大于 2^32,所以 4 个字节总能放进 5 个字符。
什么时候 Ascii85 很重要
用文本编辑器打开任意 PDF 并搜索 ASCII85Decode — Adobe 用它作为嵌入图片和字体的过滤器,使这些内容能通过 7 位传输(旧式传真系统)。Z85 则广泛用于 ZeroMQ CURVE 身份验证密钥。
特殊情况
- 全零的 4 字节块 — Ascii85 会把它编码为单个字符
z,而不是!!!!!。 - 全空格的 4 字节块 — 一些变体用
y表示四个空格,另一些则不用。 - 最后的不完整块 — 用零字节填充,并在末尾截去相应数量的输出字符。
常见问题
论输出更小,是的。论通用兼容性,则不是。Base85 含有 <、>、&、"(Ascii85 中)等字符,在 XML、JSON 和 URL 中需要转义。Z85 避免了这一点,但大多数工具原生支持的是 Base64。
处理 PostScript 或 PDF 文件时用 Ascii85。源代码、配置文件和网络协议用 Z85。RFC 1924 的 IPv6 编码是同一组 85 个字符的另一种分配方式,实际很少使用。
不可以。它们使用不同的字符集。用 Z85 的对照表去解码 Ascii85 会得到乱码。编码前先选定一种,并始终保持一致。
在 PDF 或 PostScript 流中使用 Adobe Ascii85 时需要,它们用于标记编码区域。单独使用以及所有 Z85 输出都不需要分隔符。
相关工具
Atbash 密码编码器
使用 Atbash 密码编码或解码文本,这是一种把 A-Z 映射为 Z-A 的希伯来替换法。同一个操作既可加密也可解密。
AES 加密 / 解密
使用 OpenSSL AES cipher 加密和解密低风险文本。口令会用 SHA-256 哈希,Base64 输出包含 IV 加密文。
A1Z26 密码编码器
使用 A1Z26 密码(A=1, B=2, ... Z=26)编码文本,或把数字序列解码回字母,并可自定义分隔符。
Base32 编码器和解码器
使用 RFC 4648 字母表编码和解码 Base32 字符串。适用于 TOTP 密钥、大小写不敏感的令牌和人工输入的标识符。
bcrypt 生成器
从 plaintext password 生成 bcrypt hash。Cost factor 可在 4 到 14 之间调整,兼容 Laravel、Django、Node 和 PHP。
bcrypt 哈希生成器
生成 bcrypt 哈希,或用明文密码对照已有的 bcrypt 哈希进行验证。一个工具内并排支持生成和验证。