wire / encoding / z-base-32

z-base-32 (Zooko's human-oriented base-32)

z-base-32 is Zooko O'Whielacronx's permuted Base32: the same 5-bits-per-character scheme as RFC 4648 Base32, but with the alphabet 'ybndrfg8ejkmcpqxot1uwisza345h769', chosen so the easiest-to-say and most frequent symbols map to the most common data, with no padding characters. It is used in Tahoe-LAFS, Mnet, and BitTorrent Mainline DHT contexts where a compact, transcribable, unpadded encoding is wanted.

encoding kind encoding status de-facto verification verified tier B encoding@1

aka: zbase32 · z-base32 · Zooko base32 · human-oriented base-32

test vectors

z-base-32 — human-oriented base-32 (Zooko O'Whielacronx) · alphabet: ybndrfg8ejkmcpqxot1uwisza345h769

inputoutputnote
utf8 ascii Empty input -> empty output.
f utf8 ca ascii Byte-aligned: 'f' (0x66) -> 'ca' (8 bits -> 2 chars, trailing 5-bit group zero-extended).
fo utf8 c3zo ascii Byte-aligned: 'fo' -> 'c3zo'.
foo utf8 c3zs6 ascii Byte-aligned: 'foo' -> 'c3zs6'.
foobar utf8 c3zs6aubqe ascii Byte-aligned: 'foobar' -> 'c3zs6aubqe'.
c3zs6aubqe ascii foobar utf8 Round-trip: z-base-32-decode("c3zs6aubqe") = "foobar".

provenance

see also

agent: curl -H 'accept: application/json' wire.phall.io/encoding/z-base-32 or /encoding/z-base-32.json