Crockford Base32 Specification: Standar Enkode Data

Crockford Base32 adalah skema pengkodean representasi data biner ke dalam format teks berbasis 32 karakter alfanumerik yang dirancang agar mudah dibaca manusia, tidak ambigu saat diketik, dan tahan terhadap kesalahan visual maupun transkripsi. Dibuat oleh Douglas Crockford pada tahun 2001, standar ini secara spesifik menghilangkan karakter yang sering tertukar seperti huruf 'I', 'L', 'O', dan angka '1' atau '0' untuk mencegah salah interpretasi.

Standar ini banyak diadopsi dalam berbagai sistem modern yang membutuhkan representasi string pendek namun aman dari kesalahan manusia, seperti penanganan ID unik, kunci lisensi perangkat lunak, sistem keamanan OTP, hingga representasi UUID (Universally Unique Identifier). Crockford Base32 memetakan setiap 5 bit data biner ke dalam satu dari 32 karakter yang telah ditentukan, menghasilkan efisiensi kompresi data string yang lebih baik dibandingkan heksadesimal sekaligus lebih mudah diucapkan dan dibaca dibandingkan Base64.

Alfabet Resmi Crockford Base32

Alfabet Crockford Base32 hanya terdiri dari 32 karakter spesifik. Huruf vokal (I, L, O, U) sengaja dibuang sepenuhnya untuk menghindari pembentukan kata-kata yang tidak senonoh atau membingungkan secara visual, serta meminimalisir risiko kesalahan pengetikan antara huruf mirip angka.

Nilai (Desimal) Bit (Biner) Karakter Standar Karakter Alias / Alternatif Saat Dekode
0000000O, o
1000011I, i, L, l
2000102-
3000113-
4001004-
5001015-
6001106-
7001117-
8010008-
9010019-
1001010Aa
1101011Bb
1201100Cc
1301101Dd
1401110Ee
1501111Ff
1610000Gg
1710001Hh
1810010Jj
1910011Kk
2010100Mm
2110101Nn
2210110Pp
2310111Qq
2411000Rr
2511001Ss
2611010Tt
2711011Vv
2811100Ww
2911101Xx
3011110Yy
3111111Zz

Aturan Parsing dan Dekode Karakter

Dalam implementasi dekode (decoding) Crockford Base32, terdapat beberapa aturan toleransi input untuk memudahkan pengguna manusia:

  • Case-Insensitive: Input huruf kecil otomatis dikonversi menjadi huruf kapital (kecuali jika diabaikan sebagai pemisah).
  • Karakter Pengganti (Aliases): Huruf I dan l otomatis dianggap sebagai angka 1. Huruf O otomatis dianggap sebagai angka 0.
  • Tanda Pemisah (Hyphens): Karakter tanda hubung (-) dapat dimasukkan di antara string untuk meningkatkan keterbacaan (misalnya 1234-5678) dan harus diabaikan oleh mesin parser.
  • Checksum Opsional: Standar ini mendukung karakter cek (checksum) tambahan di akhir string menggunakan simbol bintang (*), tanda tilde (~), atau karakter khusus lainnya untuk validasi integritas data berbasis modulo 37.

Perbedaan Utama dengan RFC 4648 Base32

Meskipun sama-sama menggunakan basis 32 bit, Crockford Base32 memiliki perbedaan fundamental dibandingkan standar RFC 4648 yang biasa digunakan pada aplikasi kriptografi seperti TOTP (Google Authenticator).

Fitur Crockford Base32 RFC 4648 Base32
Set Karakter 0-9, A-Z (tanpa I, L, O, U) A-Z, 2-7
Padding (=) Tidak menggunakan padding Menggunakan padding '=' di akhir
Toleransi Ketik Tinggi (konversi otomatis huruf mirip) Rendah (Strict case/karakter)
Penggunaan Umum URL, Serial Number, UUID, Token Kriptografi, RFC Compliant Systems

Implementasi Teknis Pemrograman

Dalam pemrosesan string, enkode integer atau byte array ke Crockford Base32 membutuhkan pergeseran bit (bitwise shift) dari blok 8-bit byte menjadi blok 5-bit karakter. Berikut adalah ilustrasi logika dasar dalam penanganan string:


# Contoh pemetaan string Crockford Base32 sederhana (Python Style)
ALPHABET = "0123456789ABCDEFGHJKMNPQRSTVWXYZ"

def encode_integer(n):
    if n == 0:
        return "0"
    res = []
    while n > 0:
        res.append(ALPHABET[n & 31])
        n >>= 5
    return "".join(reversed(res))

Pastikan sistem validasi Anda mengabaikan spasi atau karakter tanda hubung jika menerima input langsung dari pengguna akhir untuk mencegah error parsing data.