> 编码 | 解码 | base32 <
// Base32编码用于人类可读的二进制数据表示
[人性化]
人类友好
使用易于阅读的字符(A-Z,2-7),避免容易混淆的字符如0、1、8、9。
[安全]
本地处理
所有转换都在您的浏览器中进行。您的数据永远不会离开您的设备。
[标准]
RFC 4648
遵循RFC 4648标准,确保与其他系统和应用程序的兼容性。
>> 技术信息
Base32工作原理:
Base32使用32个字符(A-Z和2-7)编码二进制数据。每5字节编码为8字符,提供良好的可读性和错误检测能力。
示例:
"你好" → 4S6KNZNFW3Q====
为什么使用Base32:
- >避免混淆字符,提高可读性
- >适合人工输入和验证
- >良好的错误检测能力
- >适用于不区分大小写的系统
- >Google Authenticator等应用使用
>> 常见问题
什么是Base32编码?
Base32是一种使用32个可打印字符(A-Z和2-7)来表示二进制数据的编码方案,特别设计为人类友好和避免字符混淆。
Base32为什么不使用0、1、8、9?
Base32故意避免使用容易与字母混淆的数字:0(与O混淆)、1(与I混淆)、8(与B混淆)、9(与g混淆),提高可读性。
Base32和Base64有什么区别?
Base32使用32个字符,输出更长但更易读;Base64使用64个字符,输出更短但包含特殊字符。Base32更适合人工处理。
何时使用Base32?
Base32适用于需要人工输入的场景,如二维码、备份代码、TOTP密钥,以及不区分大小写的文件系统和协议。
// 速查表
| 输入 | Base32 | Base64 |
|---|---|---|
| f | MY====== | Zg== |
| fo | MZXQ==== | Zm8= |
| foo | MZXW6=== | Zm9v |
| foob | MZXW6YQ= | Zm9vYg== |
| fooba | MZXW6YTB | Zm9vYmE= |
| foobar | MZXW6YTBOI====== | Zm9vYmFy |
// 代码示例
CLI echo -n foobar | base32
Python base64.b32encode(b'foobar') / base64.b32decode(s)
Go base32.StdEncoding.EncodeToString([]byte("foobar"))
Java new Base32().encodeToString(bytes) // commons-codec
Node.js npm i hi-base32 // no built-in
>> 更多问题
问:Base32、Base64 和 Base16 有什么区别?
答:三者都来自 RFC 4648,区别只在每个字符携带的位数:Base16 为 4 位(开销 100%),Base32 为 5 位(60%),Base64 为 6 位(33%)。Base32 更长,但易读且不区分大小写。
问:Base32 解码区分大小写吗?
答:不区分。RFC 4648 的字母表为大写,但解码器应把小写视为相同。本工具会在解码前把输入转为大写,因此 jbswy3dp 与 JBSWY3DP 结果相同。
问:Base32 在实际中用在哪里?
答:常见于 TOTP/2FA 密钥(Google Authenticator、Authy)、Tor v3 洋葱地址(56 个字符),以及不区分大小写的系统标识符,如某些文件系统或 DNS 标签。