Dipublikasikan: 11 Desember 2025
Terakhir diperbarui: 11 Desember 2025
Dipublikasikan: 11 Desember 2025
Terakhir diperbarui: 11 Desember 2025
Raymond Kelvin Nando — Base45 merupakan metode encoding biner-ke-teks yang memetakan data menjadi 45 karakter ASCII yang aman digunakan dalam lingkungan komunikasi yang terbatas, khususnya sistem QR Code berkapasitas rendah. Base45 menjadi terkenal setelah dipakai sebagai bagian dari standar EU Digital COVID Certificate (EUDCC), di mana ia berfungsi menghasilkan representasi data yang lebih ringkas dibanding Base32 maupun Base36, namun tetap mempertahankan kompatibilitas tinggi terhadap pemindai QR dan sistem transmisi yang hanya mendukung karakter tertentu.
Daftar Isi
Base45 adalah skema encoding yang mengubah data biner ke urutan karakter teks menggunakan alfabet berjumlah 45 simbol. Alfabet Base45 (sesuai spesifikasi EUDCC) terdiri dari:
0–9
A–Z
spasi
$, %, *, +, -, ., /, :
Total 45 karakter.
Base45 mengelompokkan data dalam unit 11 bit (karena 45² = 2025, yang dapat menampung dua byte = 16 bit), dengan metode konversi yang memetakan pasangan byte ke dua atau tiga karakter Base45. Tujuan utama Base45 adalah memberikan encoding yang cukup padat untuk QR Code, namun tetap mudah didistribusikan melalui saluran teks seperti HTTP headers, string QR, atau media dengan compatibilitas karakter terbatas.
Base45 bukan algoritma enkripsi atau kompresi. Ini murni representasi-data, fokus pada efisiensi dan kemampuan transport.
Base45 memiliki jejak historis yang jauh lebih modern dibanding Base16, Base32, atau Base64. Ia dikembangkan dan diformalkan dalam RFC 9285 pada tahun 2022 sebagai respons terhadap kebutuhan penyimpanan data efisien dalam QR Code.
Dalam masa pandemi COVID-19, Uni Eropa memperkenalkan EU Digital COVID Certificate, sistem identitas kesehatan digital berbasis QR. Sistem ini membutuhkan encoding yang cukup ringkas namun kompatibel dengan pembaca QR global. Base32 dan Base64 dianggap terlalu panjang atau tidak cocok karena set karakter yang berpotensi bermasalah pada QR. Base45 dipilih karena:
Meskipun awalnya dikembangkan untuk EUDCC, Base45 kemudian diadopsi dalam berbagai ekosistem yang membutuhkan encoding teks aman, ringkas, dan highly portable.
Base45 menggunakan konversi berbasis pembagian untuk memetakan byte ke angka basis-45 lalu ke karakter alfabet.
Daftar karakter:
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:
Urutannya penting karena setiap indeks menentukan nilai 0–44.
Base45 bekerja pada blok byte:
Karena 45² = 2025, yang dapat menampung nilai hingga 16-bit (0–65535), maka:
nilai = byte1*256 + byte2
Kemudian:
c1 = nilai % 45
c2 = (nilai / 45) % 45
c3 = nilai / 45 / 45
Dekode membalik proses:
nilai = c1 + c245 + c345*45
Jika 3 karakter → hasil 2 byte
Jika 2 karakter → hasil 1 byte
Semua karakter Base45 dapat diproses oleh pemindai QR standar tanpa risiko escape, encoding error, atau transformasi karakter.
Tidak seperti Base32/64, Base45 tidak memakai simbol “=” sebagai padding.
Setiap output Base45 dapat dikonversi balik ke bentuk biner asli tanpa kehilangan data.
Base45 tidak menyediakan keamanan; pada EUDCC, keamanan disediakan oleh COSE/CBOR dan signature digital, bukan Base45.
Input byte: 0x5A (90 desimal)
nilai = 90
c1 = 90 % 45 = 0
c2 = 90 / 45 = 2
Output: 02
Karakter ke-0 = 0
Karakter ke-2 = 2
Output Base45: 02
Input bytes: 0xAB 0xCD
nilai = 171256 + 205 = 43981
c1 = 43981 % 45 = 43981 mod 45 = 11
c2 = (43981 / 45) mod 45
c3 = 43981 / (4545)
Output: karakter indeks c1, c2, c3
Misal: 11 = B, 34 = Y, 21 = L
Output: BYL
(Indeks sebenarnya tergantung alfabet Base45)
Input: HELLO
Byte: 48 45 4C 4C 4F
Proses encoding blok demi blok menghasilkan string base45 seperti:
QED8WEX0
(variasi tergantung implementasi, tetapi pola 2–3 karakter per byte berlaku)
Input: 00 FF
nilai = 0256 + 255 = 255
c1 = 255 % 45 = 30 (U)
c2 = 255 / 45 = 5 (5)
c3 = 255 / (4545) = 0 (0)
Output: U50
Payload terserialisasi COSE/CBOR → hasil Base45 misalnya:
NCFOXN%TSMAHN-H7AG3
(Contoh representatif, bukan data asli)
Input: GGW
c1 = G (16), c2 = G (16), c3 = W (32)
nilai = 16 + 1645 + 3245*45
Hasil → dua byte
Input bytes: 01 02 03
Output Base45: 19A06 (contoh pola blok)
Kelebihan:
Kekurangan: