功能说明
Base32 使用 32 个可打印字符表示二进制数据,常用于需要人工抄写或大小写不敏感的密钥、TOTP 种子。该实现基于 RFC 4648 字母表,把 UTF-8 字节流编码为带等号填充的字符串,并可解码回文本。编码结果只包含大写字母与数字 2 到 7。
关键代码
编码时把每个字节移入位缓冲,每当累计至少 5 位就取出高 5 位映射到字母表;结束时把剩余位左移补零再取一个字符,最后补等号到 8 的倍数。解码先去掉填充并校验字符集,再按 5 位累积、每满 8 位产出一个字节,最后用 TextDecoder 还原 UTF-8。
for (const byte of bytes) {
value = (value << 8) | byte;
bits += 8;
while (bits >= 5) {
output += ALPHABET[(value >>> (bits - 5)) & 31];
bits -= 5;
}
}
使用注意
解码不校验填充长度是否合法,只忽略末尾等号,因此截断的输入可能被静默接受。输入为空字符串时返回空字符串。编码结果不提供加密或完整性保护,不能替代签名。Bitwise 操作按 32 位处理,但缓冲区始终小于 13 位,不会丢失有效数据。
验证方式
断言 base32Encode(“hello”) 返回 NBSWY3DP,base32Decode(“NBSWY3DP”) 返回 hello。小写输入解码结果一致。包含 0 或 1 的字符串抛 RangeError。中文文本编码后再解码应保持原样。非字符串输入抛 TypeError,空字符串往返仍为空字符串。