Fact-checked by Grok 2 weeks ago

Base32

Base32 is a scheme standardized in RFC 4648 that converts arbitrary sequences of (octets) into a case-insensitive representation using a 32-character alphabet of uppercase letters A–Z and digits 2–7, with the equals sign (=) employed for padding to ensure the output length is a multiple of 8 characters. This encoding maps groups of 40 bits (five octets) to eight characters, processing data from most significant bit to least significant bit, making it efficient for transmitting information over text-only channels while avoiding issues. Defined alongside and in RFC 4648, Base32 is intended for use in US-ASCII-restricted environments, such as or network protocols, where the encoded data does not need to be human-readable but must be robust against common transmission errors. A variant known as Base32hex employs a different alphabet (digits 0–9 followed by letters A–V) to align with conventions, suitable for applications requiring unambiguous digit-letter separation. Notable applications of Base32 include generating SASL mechanism names in the GS2 family (as per RFC 5801), where it encodes hashed GSS-API OIDs into case-insensitive strings prefixed with "GS2-", facilitating secure authentication in protocols like those using . Its design balances compactness and error resistance, though it produces about 60% more output than the input due to the 5-bit-per-character efficiency.

Fundamentals

Definition and Purpose

Base32 is a scheme that converts arbitrary into an ASCII-compatible string representation using a fixed of 32 , with each encoding 5 bits of data. This method groups input octets into 40-bit blocks (5 octets), which are then divided into eight 5-bit values, each mapped to a from the alphabet, resulting in an encoded output that is approximately 60% larger than the original binary due to the reduced information density per character compared to 8-bit octets. The scheme includes padding with the "=" character to ensure proper alignment when the input length is not a multiple of 5 octets, maintaining decodability without ambiguity. The primary purposes of Base32 are to enable the safe transmission and storage of across text-only protocols and systems that restrict or alter non-ASCII characters, such as (via ), URLs, and other ASCII-limited channels. It avoids the use of control characters or ambiguous symbols that could be misinterpreted or stripped during transit, while providing a case-insensitive encoding suitable for environments where uppercase and lowercase distinctions are unreliable. Although not explicitly optimized for human readability, the choice of alphanumeric characters facilitates occasional manual inspection or transcription in technical contexts. Base32's development emerged in the early as part of IETF efforts to standardize encodings for protocols, with its first formal description appearing in 2938 (2000) for representing composite media features in a compact, case-insensitive format. It was subsequently refined and broadly specified in 3548 (2003), which established common alphabets and rules for Base16, Base32, and , and later updated in 4648 (2006) to address ambiguities and improve interoperability, obsoleting the prior version. This evolution reflects the need for reliable binary-to-text mappings in growing applications, building on earlier encodings like but prioritizing case insensitivity and simplicity in certain use cases.

Alphabet and Encoding Mechanics

The Base32 encoding scheme utilizes a fixed alphabet consisting of 32 symbols to represent values from 0 to 31, enabling the efficient mapping of into a textual format suitable for transmission over text-based protocols. The standard alphabet, as defined in RFC 4648, comprises the uppercase letters A through Z (values 0 to 25) followed by the digits 2 through 7 (values 26 to 31), resulting in the sequence: A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, 2, 3, 4, 5, 6, 7. This selection includes letters I and O, prioritizing a full 26-letter set for compatibility with existing systems, while the digits 0 and 1 are omitted to reduce visual ambiguity with letters, and 8 and 9 are excluded to maintain the 32-symbol limit.
ValueSymbolValueSymbolValueSymbolValueSymbol
0A8I16Q24Y
1B9J17R25Z
2C10K18S262
3D11L19T273
4E12M20U284
5F13N21V295
6G14O22W306
7H15P23X317
The encoding process begins by processing the input as a of 8-bit bytes (octets), assuming a most-significant-bit-first . The data is divided into groups of 40 bits, equivalent to 5 bytes, which are then subdivided into 8 contiguous 5-bit segments. Each 5-bit segment is interpreted as an value between 0 and 31, which is mapped directly to the corresponding in the . For incomplete groups at the end of the input (less than 40 bits), the remaining bits are padded with zeros on the right to complete the 5-bit segments, and the output is appended with "=" characters to indicate the shortfall: specifically, 1 "=" for 32 input bits (yielding 7 characters), 3 "=" for 24 bits (5 characters), 4 "=" for 16 bits (4 characters), or 6 "=" for 8 bits (2 characters). No padding is needed for multiples of 40 bits. This results in an expansion factor of exactly 8/5 (1.6 times the original size) for complete groups, as 40 bits become 8 characters. Decoding reverses this process by first mapping each input character (ignoring case) back to its 5-bit value using the alphabet table, treating "=" as a skip signal. The resulting 5-bit values are concatenated into a 40-bit stream, which is regrouped into 8-bit bytes by aligning the bits in most-significant-bit-first order. "=" characters are discarded, along with any trailing bits added during encoding, to recover the original byte length. For example, if the encoded string ends with 6 "=", only the first 2 characters contribute 10 bits, which are shifted and masked to form 1 full byte plus 2 discarded bits. The process ensures lossless reconstruction provided the input is valid. Base32 includes basic error handling wherein decoding implementations must reject input containing characters outside the defined (A-Z, 2-7, or "="), as such invalid symbols indicate corruption or non-compliant data. There is no built-in or error-correcting mechanism in the core encoding; reliability depends on the surrounding protocol.

Standard Encodings

RFC 4648 Base32 (§6)

The RFC 4648 Base32 encoding specifies a method for representing arbitrary sequences of octets as a textual string using a 32-character of US-ASCII, designed primarily for applications requiring a URL-safe and human-readable format without ambiguous characters. The alphabet consists of the uppercase letters A through Z followed by the digits 2 through 7, resulting in the ordered set: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 2 3 4 5 6 7. Each character encodes 5 bits of , with the most significant bit first, and the output is produced in uppercase letters without line wrapping unless explicitly required by the application context. The encoding process groups input octets into blocks of 5 (40 bits), which are then divided into 8 groups of 5 bits each; each 5-bit value serves as an index into the alphabet to select the corresponding character. For input lengths not divisible by 5 octets, padding is applied by appending the pad character '=' to ensure the output length is a multiple of 8 characters: specifically, 1 octet yields 2 characters followed by 6 '='; 2 octets yield 4 characters followed by 4 '='; 3 octets yield 5 characters followed by 3 '='; and 4 octets yield 7 characters followed by 1 '='. This padding aligns with 40-bit processing blocks and facilitates unambiguous decoding. A representative example is the encoding of the single ASCII character "f" (hexadecimal 0x66, binary 01100110). The 8-bit input is treated as an incomplete 40-bit block, padded with zeros to 40 bits (01100110 00000000 00000000 00000000 00000000), then into 5-bit groups: 01100 (index 12 → M), 11000 ( 24 → Y), followed by six zero groups ( 0 → A, but since padded, replaced by '='). The result is "MY======". This process demonstrates the bit-shifting mechanics: the first 5 bits (01100) map directly, with subsequent shifts extracting the next 5 bits from the remaining octet and implicit zeros. This encoding is compliant with MIME content-transfer-encoding requirements and is inherently safe for inclusion in URLs and filenames, as it avoids characters with special meanings in those contexts and produces no ambiguous symbols that could be misread (e.g., no lowercase, digits 0/1, or punctuation beyond '='). In MIME usage, non-alphabet characters are ignored during decoding, and padding may be omitted if the input length is known in advance; for URLs, the '=' pad is often percent-encoded as %3D to prevent parsing issues. Relative to the earlier RFC 3548, the Base32 specification in RFC 4648 includes minor clarifications on handling and output formatting, along with added test vectors and corrections to illustrative examples for improved .

RFC 4648 Base32hex (§7)

The Base32hex encoding, defined in Section 7 of RFC 4648, is an extended variant of the Base32 encoding scheme designed to represent using a 32-character that prioritizes compatibility with notation while preserving bit-wise sort order. This variant maps input octets to groups of 5 bits, producing an output stream of 8 characters per 40 input bits (5 octets), similar to the standard Base32 encoding in Section 6, but with a distinct that begins with the digits 0-9 followed by the uppercase letters A-V to facilitate direct representation of values. The encoding process involves concatenating input bits into 40-bit blocks, dividing each block into eight 5-bit segments, and translating each segment to the corresponding character from the , with zero bits appended to incomplete blocks to form full quanta. Output is always in uppercase letters, and with the "=" character is required to ensure the encoded length is a multiple of 8 characters, unless explicitly omitted in a specific application. The alphabet for Base32hex consists of the following 32 characters, assigned to values 0 through 31:
ValueCharacterValueCharacterValueCharacterValueCharacter
008816G24O
119917H25P
2210A18I26Q
3311B19J27R
4412C20K28S
5513D21L29T
6614E22M30U
7715F23N31V
This assignment provides a bijective between 5-bit values and the alphabet characters, enabling efficient encoding of such as cryptographic hashes or keys. Unlike the standard Base32 alphabet in RFC 4648 Section 6, which uses a more letter-heavy sequence (A-Z followed by 2-7) for general ASCII safety, the Base32hex alphabet starts with numeric digits to align with conventions, enhancing readability for hex-oriented data without incorporating a mechanism. A primary purpose of Base32hex is to maintain the sort order of encoded data when compared bit-wise, a property not preserved by the standard Base32 or encodings due to their non-monotonic alphabets; this makes it particularly suitable for applications requiring ordered representations, such as the NextSECure3 (NSEC3) protocol in DNSSEC for hashing domain names while avoiding dictionary attacks. For instance, the single octet input "f" (ASCII 0x66, binary 01100110) is encoded by grouping into 5-bit segments (01100 11000 00000 00000 00000 00000 00000 00000), yielding the output "CO======", where "C" represents 01100 (value 12) and "O" represents 11000 (value 24), followed by six padding characters. This variant's focus on hexadecimal affinity and sort preservation distinguishes it for specialized cryptographic and uses, while adhering to the same padding rules as the standard Base32 encoding.

Variant Encodings

z-base-32

z-base-32 is a variant of Base32 encoding designed for improved human usability and compactness, particularly in contexts like URIs and file identifiers. Developed by Zooko Wilcox-O'Hearn in November 2002, it prioritizes readability and error resistance by selecting and ordering an alphabet that minimizes visual confusion during transcription. The alphabet consists of the 32 characters: ybndrfg8ejkmcpqxot1uwisza345h769. This set excludes potentially confusable symbols such as 0 (zero), l (lowercase L), v, and 2 to reduce transcription errors, while including digits 1, 3, 4, 5, 6, 7, 8, 9 and a permuted selection of lowercase letters. The permutation ensures that more distinguishable and frequently used characters appear more often in typical encodings, enhancing ergonomic handling. Encoding follows the standard Base32 process of grouping input bits into 5-bit segments, mapping each to an alphabet symbol, but omits padding characters like '=' for conciseness, allowing variable-length inputs without fixed octet alignment. A key feature is full case-insensitivity: decoding accepts both uppercase and lowercase letters, mapping them to the lowercase for consistency, which makes it suitable for case-insensitive environments like filenames and URLs. Unlike some variants, it does not incorporate hyphens or other separators as part of the core encoding, though applications may add them post-encoding for readability if needed. This design was motivated by needs in projects like , where 30-octet cryptographic values required compact, human-transmittable representations. In practice, z-base-32 offers advantages in web and file naming scenarios by producing purely alphanumeric strings that are URL-safe and free of ambiguous characters, thereby lowering error rates in manual entry compared to standard Base32 alphabets that include '0', 'O', or 'I'. For instance, a 128-bit UUID, requiring 128 / 5 = 25.6 symbols (rounded to 26 characters), can be encoded without padding, resulting in a compact string like "pb1sa5dxfoo8q551pt1yw" for a sample input, facilitating shorter identifiers in distributed systems such as .

Crockford's Base32

Crockford's Base32 is a variant of the Base32 encoding scheme developed by in 2002 specifically to facilitate the accurate transmission of between humans and computers, particularly for short identifiers like UUIDs. It prioritizes human readability and error resistance over strict adherence to standards like RFC 4648. The consists of 32 symbols: the digits 0 through 9, followed by the uppercase letters A through Z excluding I, L, O, and U to minimize visual confusion with numerals and avoid unintended vulgarities. This results in the set: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, G, H, J, K, M, N, P, Q, R, S, T, V, W, X, Y, Z. Encoding treats input bytes as a bit stream, grouping them into 5-bit quanta, each mapped to a symbol from the ; to avoid padding, the input is zero-extended if necessary to ensure the bit length is a multiple of 5. Outputs use uppercase letters exclusively, with no padding characters appended. A distinguishing feature is the optional modulo-37 , which appends a single check symbol to detect transcription errors, using an extended set of 37 symbols including the primary plus *, ~, $, =, and U for the checksum value. Hyphens may be inserted arbitrarily in the encoded string for during manual transcription and are ignored during decoding. Decoding is case-insensitive, accepting lowercase letters and mapping ambiguous characters like 'i' or 'l' to '1' and 'o' to '0' to aid error correction; if a checksum is present, it is validated, and mismatches cause decoding to fail, preventing common input errors. For instance, the ASCII string "base" encodes to "C9GQ6S8" without and "C9GQ6S8J" with , where 'J' is the check . This flexible yet robust design enhances reliability in scenarios involving human entry, such as numbers or keys.

Other Specialized Variants

In the historical context, early adaptations of 5-bit encoding schemes laid groundwork for modern Base32 by representing data in 32- sets tailored to constraints of the era. The Electrologica X1, a transistorized computer developed in the during the early 1960s, incorporated 5-bit portions for encoding source code and data on 5-channel systems. Similarly, Alan Turing's contributions to the computer in the late 1940s promoted a base-32 numerical system for efficient data representation and output, devising encoding methods like Scheme A in collaboration with Cicely Popplewell to map binary values to 32 distinct s, influencing post-war computer design. A prominent geospatial variant is , introduced by Gustavo Niemeyer in 2008 as a public-domain system for encoding into short, hierarchical strings. It uses a modified Base32 alphabet consisting of digits 0-9 and letters b-h, j-k, m-n, p-q, r-s, t-u, v-w, x-y, z (excluding a, i, l, o to avoid visual similarities with numerals), enabling precise location representation where each additional character refines the geographic precision to approximately 1/32,000 of the Earth's surface. This adaptation interleaves binary coordinates via principles, producing strings like "gcpvj" for , facilitating efficient spatial indexing in databases and URL-shortened geolinks. Application-specific variants often prioritize and in constrained environments. Word-safe Base32 adaptations, for instance, modify the to exclude ambiguous characters and select letters to avoid forming dictionary words or offensive terms across languages, thereby enhancing security in contexts like or data transmission where readability must not imply meaning. These designs maintain the 5-bit grouping for compactness but select symbols to minimize unintended linguistic patterns. Across these specialized forms, a common trait is the retention of Base32's fundamental 5-bit mechanics for binary-to-text conversion while customizing the symbol set to address domain needs like historical hardware limitations, geospatial hierarchy, or security obfuscation; however, their niche focus has limited broader adoption compared to standardized variants.

Comparisons

With Base64

Base32 and Base64 are both binary-to-text encoding schemes defined in RFC 4648, but they differ fundamentally in their design parameters and implications for data representation. Base32 encodes data using a 32-character alphabet, mapping 5 bits per character, which results in processing 40-bit groups (equivalent to 5 octets) into 8 characters. In contrast, Base64 employs a 64-character alphabet, encoding 6 bits per character and handling 24-bit groups (3 octets) into 4 characters. This leads to distinct efficiency profiles: Base32 expands input data by approximately 60% for complete 5-octet blocks (8 characters for 5 bytes), while Base64 achieves about 33% expansion (4 characters for 3 bytes). The alphabets further highlight differences in safety and compatibility. Base32's alphabet consists of the uppercase letters A–Z and digits 2–7, followed by "=" for padding, making it entirely case-insensitive and free of special characters. , however, uses A–Z, a–z, 0–9, plus "+" and "/", with "=" for padding, which can introduce issues in URL-safe contexts or systems intolerant to these symbols, often necessitating variants like Base64url. Both schemes use "=" padding exclusively to align incomplete quanta, but Base32's restricted set enhances readability and reduces errors in human-transmitted identifiers. In terms of use cases, Base32 is preferred in scenarios requiring unambiguous, human-readable strings, such as shared secrets in (TOTP) systems, where it encodes keys to minimize transcription errors. Base64 remains the standard for general-purpose applications like email attachments and binary data transfer in protocols, due to its higher density. Although Base32 demands more output characters—incurring higher storage and transmission overhead—its 40-bit alignment (multiples of 5 octets) can simplify decoding in certain byte-oriented systems compared to Base64's 24-bit groups, as both align neatly to byte boundaries but Base32 avoids the finer-grained 6-bit shifts. Historically, Base32 emerged in RFC 4648 as a safer alternative to Base64 for restricted US-ASCII environments and case-insensitive needs, prioritizing error resistance over compactness.

Advantages and Disadvantages

Base32 encoding offers several advantages over other binary-to-text schemes, particularly in scenarios prioritizing human readability and error resistance. Its alphabet, consisting of 32 characters (uppercase letters A–Z and digits 2–7), avoids digits 0 and 1 (using 2–7 instead), though it includes letters such as I, L, and O that may be confused with numerals. This design enhances error detection compared to , where characters like 0, O, and l can be confused. Additionally, standard Base32 is case-insensitive, allowing flexible input during decoding without altering the output, which simplifies usage in varied environments. Variants like Crockford's Base32 further improve this by excluding additional ambiguous characters (I, L, O, U) and being inherently URL-safe, avoiding symbols that could interfere with web transmission. In terms of compactness, Base32 is well-suited for encoding 40-bit blocks into exactly 8 characters, providing a balanced density of 5 bits per symbol that outperforms Base16 (4 bits per symbol) for general binary data. Relative to Base16 (hexadecimal), Base32 yields more compact representations for non-hexadecimal inputs—for instance, 20 bits require 5 Base32 characters versus 5 Base16 characters for only 16 bits—while maintaining readability without the need for specialized hex knowledge. However, Base32 has notable disadvantages, primarily its lower efficiency compared to Base64. It produces approximately 60% larger output than the input (versus Base64's 33% overhead), as each 8-byte input expands to about 12.8 characters on average, making it less ideal for bandwidth-constrained applications. Padding with "=" characters further increases length for non-multiples of 40 bits, adding to the overhead in short encodings. For data already in form, Base16 is more efficient, as it directly maps without the need for regrouping bits. On security aspects, Base32 provides no inherent or ; it merely represents in text form and can inadvertently leak information through encoding length if not padded consistently, potentially enabling length-based attacks in sensitive contexts. While variants such as Crockford's incorporate optional checksums (using modulo-37 arithmetic) to detect transcription errors or alterations, these do not mitigate cryptographic vulnerabilities and add minor computational overhead. Overall, Base32 trades raw efficiency for enhanced readability and safety, making it preferable in human-centric applications like identifiers or DNS records over purely optimized schemes like , though it underperforms in high-volume data transfer.

Implementations and Applications

Software Libraries

Several programming languages provide built-in support or popular third-party libraries for Base32 encoding and decoding, primarily adhering to the RFC 4648 standard. These implementations facilitate the conversion of to and from Base32-encoded strings, enabling applications in data serialization, URL-safe transmission, and human-readable representations of binary values. In , there is no native Base32 support in the such as java.util.Base, which focuses on ; developers typically rely on third-party libraries like Codec, which offers a Base32 class for encoding and decoding per RFC 4648, or Google Guava's BaseEncoding for flexible binary-to-text conversions including Base32. Similarly, in C#, the lacks a built-in System.Convert.ToBase32String method, with implementations often using custom code or libraries like the ConvertBase32 utility in open-source projects for RFC 4648 compliance. Python includes native Base32 functions in its standard base64 module, with b32encode() converting bytes to Base32-encoded bytes and b32decode() performing the reverse, supporting optional case folding and character mapping for robustness. Third-party packages like base32-crockford extend this for variants, such as Crockford's Base32, providing additional encoding options beyond the standard . Go features a standard library package encoding/base32 that implements 4648 encoding and decoding, including StdEncoding for the standard variant and HexEncoding for the alphabet; it supports streaming via NewEncoder and NewDecoder for efficient handling of large data. In , the base32 crate provides encode() and decode() functions for various Base32 alphabets, including 4648, and is no_std compatible for embedded use cases. JavaScript lacks native Base32 support in browsers or , but libraries such as base32-encode offer encoding/decoding for multiple variants; for , the class can integrate with these via third-party wrappers. Support for Base32 variants is more limited and often confined to specialized libraries. For Crockford's Base32, the crockford-base32 package in implements the human-readable encoding without ambiguous characters, and similar crates exist in and Go. z-base-32 has sparse adoption, with implementations like the zbase32 module for , the z-base-32 PyPI package for , and the zbase32 Go package, focusing on URL-safety and brevity but lacking widespread integration. Base32 implementations generally exhibit linear O(n) relative to input size, involving straightforward bit shifting and table lookups, with decoding potentially slower due to validation but no common like SIMD instructions.

Use in Protocols and Systems

Base32 encoding finds application in several network protocols and distributed systems where human-readable representation of is beneficial, particularly for identifiers and hashes that require safe transmission in textual formats. In the (DNSSEC), Base32 is used to encode hashed owner names in NSEC3 resource records, which provide authenticated denial of existence without revealing the full zone contents. This encoding, specified in RFC 5155, employs the Base32hex alphabet to represent the hash of domain names, ensuring compatibility with DNS wire format while obscuring sensitive information during zone walking attempts. For (OTP) systems, Base32 is the standard encoding for shared secrets in (TOTP) implementations, as outlined in RFC 6238, which builds on the HOTP algorithm from RFC 4226. These secrets are typically embedded in otpauth URIs for applications like , where the Base32 format from RFC 4648 facilitates easy copying and pasting without introducing invalid characters in URLs or text fields. In distributed file systems like the (IPFS), Base32 serves as the default encoding for Content Identifiers (CIDs) in version 1 format. CIDs encapsulate content-addressed hashes using the Base32 alphabet to produce compact, case-insensitive strings that are resilient to transmission errors and suitable for use in URLs and networks. This choice enhances across diverse implementations by avoiding ambiguous characters like uppercase 'I', 'L', 'O'. Bitcoin's Bech32 address format, introduced in BIP 173 in 2017, employs a modified Base32 encoding tailored for outputs. This variant uses a 32-character excluding ambiguous letters, combined with a BCH for detection, making addresses more robust against typing errors and copy-paste issues compared to Base58 formats. Bech32's design prioritizes human readability and safety in wallet software and transaction propagation. , a geocoding system for encoding latitude and longitude into short strings, utilizes Base32 to represent hierarchical grid cells on Earth's surface. This enables efficient proximity searches in geospatial APIs and databases, such as those integrating location data in social media platforms, by allowing prefix matching for bounding box queries without complex geometric computations. Adoption of Base32 has grown in modern authentication protocols due to its avoidance of visually similar characters, reducing errors in manual entry; for instance, URL-safe variants are increasingly preferred in credential systems for their compatibility with web standards. However, interoperability challenges persist in legacy environments, where differing alphabets—such as standard versus padded or hexadecimal variants—can lead to decoding failures during data exchange between systems adhering to pre-RFC 4648 implementations.

References

  1. [1]
    RFC 4648 - The Base16, Base32, and Base64 Data Encodings
    This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data.
  2. [2]
  3. [3]
    RFC 2938: Identifying Composite Media Features
    ### Summary of Base32 Encoding in RFC 2938
  4. [4]
    RFC 3548 - The Base16, Base32, and Base64 Data Encodings
    This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data.
  5. [5]
  6. [6]
  7. [7]
  8. [8]
    z-base-32 encoding - Phil Zimmermann
    All previous base-32 encoding schemes assume that the binary data to be encoded is in 8-bit octets, so you would have to pad the data out to 2 octets and encode ...
  9. [9]
    DaGenix/libzbase32 - GitHub
    Some of the key differences: Z-base-32 a different alphabet ("ybndrfg8ejkmcpqxot1uwisza345h769") which consists of all lower-case letters (this library will ...
  10. [10]
    ZBase32 v2.0.0 - Hexdocs
    z-base-32 is a Base32 encoding designed to be easier for human use and more compact. It includes 1, 8 and 9 but excludes l, v and 2.
  11. [11]
    #91 (switch to z-base-32) – Tahoe-LAFS
    Switch from Python standard library base32 encoding to z-base-32 encoding. The main advantage is that this eliminates trailing "=" signs.
  12. [12]
    Base 32 - Douglas Crockford
    Mar 4, 2019 · Base 32 is a textual 32-symbol notation for expressing numbers, balancing compactness and error resistance, using 10 digits and 22 letters, ...
  13. [13]
    Crockford Base32 Encoding - Online Base 32 Decoder ... - dCode
    Tool to decode / encode with the Crockford Base-32. Crockford's Base32 is a variant of base 32 created by Douglas Crockford improving use by humans.
  14. [14]
    [PDF] The Dijkstra–Zonneveld ALGOL 60 compiler for the Electrologica X1
    Sep 14, 2018 · portions of 5 bits, each of which was encoded according to its own frequency distribution. The 12 bit function part was encoded together ...
  15. [15]
    Alan Turing at The University of Manchester (Digital 60)
    So it was Alan Turing who was mainly responsible for the decision to use the Base-32 Numerical System and he devised with Cicely the Scheme A method of ...
  16. [16]
  17. [17]
    IP Geolocation through Geographic Clicks - ACM Digital Library
    Mar 4, 2022 · Gustavo Niemeyer. 2008. Geohash. Retrieved on 10 August, 2021 from https://forums.geocaching.com/GC/index.php?/topic/186412-geohashorg/. Go ...<|separator|>
  18. [18]
    A base 32 encoding for binary strings - GitHub
    Base 32 is a compromise between base 16 and base 64. It allows encoding 2.5 bytes into 4 characters (60% overhead).Missing: percentage | Show results with:percentage
  19. [19]
    Friendly Binary-to-text Encodings | ATOMWOLF
    Apr 14, 2024 · This has been called a “word-safe” Base32. This is mixed-case, of course, but the amount it tries to avoid words seems impressive. Like the ...Missing: vowels | Show results with:vowels
  20. [20]
    Base 32 and base 64 encoding - Applied Mathematics Consulting
    Dec 28, 2018 · Radix 85 encoding is also used for similar purposes, primarily in cryptography applications, as the smallest radix that allows encoding 32 bits ...
  21. [21]
    RFC 6238 - TOTP: Time-Based One-Time Password Algorithm
    This document describes an extension of the One-Time Password (OTP) algorithm, namely the HMAC-based One-Time Password (HOTP) algorithm, as defined in RFC 4226.
  22. [22]
    Content Identifiers (CIDs) - IPFS Docs
    Oct 30, 2025 · The default for CIDv1 is the case-insensitive base32 , but use of the shorter base36 is encouraged for IPNS names to ensure same text ...
  23. [23]
    Geohash encoding/decoding - Movable-type.co.uk
    A geohash is a convenient way of expressing a location (anywhere in the world) using a short alphanumeric string, with greater precision obtained with longer ...Missing: 2008 | Show results with:2008