Untuk mengonversi UTF-8 ke Base64URL, ikuti 4 langkah: (1) enkode teks ke byte UTF-8, (2) terapkan Base64 standar, (3) ganti + → - dan / → _, (4) hapus = padding di akhir. Ini menghasilkan string aman-URL sesuai RFC 4648, yang digunakan dalam JWT dan header API.
Base64 Standar vs. Base64URL
| Karakter | Base64 Standar | Base64URL | Alasan |
|---|---|---|---|
| Karakter ke-62 | + |
- |
+ berarti spasi dalam URL |
| Karakter ke-63 | / |
_ |
/ adalah pemisah path dalam URL |
| Padding | = wajib |
Dihilangkan | = menjadi %3D dalam URL |
| Aman-URL | Tidak | Ya | Langsung digunakan di query string dan nama file |
Berdasarkan RFC 4648 §5, “Alfabet Aman untuk URL dan Nama File” ini menjamin kompatibilitas lintas sistem.

Proses Konversi 4 Langkah
| Langkah | Operasi | Contoh (“Hello”) |
|---|---|---|
| 1 | Teks UTF-8 → byte | H e l l o → array byte |
| 2 | Byte → Base64 standar | SGVsbG8= |
| 3 | Ganti + → -, / → _ |
Tidak perlu perubahan di sini |
| 4 | Hapus = padding di akhir |
SGVsbG8 |
Enkoding Base64 meningkatkan ukuran data sekitar ~33% menurut Wikipedia.

Penanganan Unicode dan Emoji
Berdasarkan NextUtils, Base64 adalah enkoding, bukan enkripsi — ia memindahkan data melalui saluran khusus teks. Untuk menangani Unicode/emoji tanpa kerusakan (“Mojibake”), selalu gunakan TextEncoder untuk mengonversi ke byte UTF-8 terlebih dahulu.
| Input | Tanpa TextEncoder | Dengan TextEncoder |
|---|---|---|
Hello 世界! 🌍 |
Mojibake / TypeError | Base64URL yang benar |
Contoh Kode
JavaScript (Browser) — Aman-Unicode
function toBase64Url(str) {
const bytes = new TextEncoder().encode(str);
const base64 = btoa(String.fromCharCode(...bytes));
return base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
}
Python 3 — Pustaka Standar
Berdasarkan AskPython:
import base64
data = "Hello 世界! 🌍"
encoded = base64.urlsafe_b64encode(data.encode('utf-8')).decode('utf-8').rstrip('=')
print(encoded)
Node.js — Konversi Buffer
const str = "API_Payload_Data";
const base64url = Buffer.from(str, 'utf8')
.toString('base64')
.replace(/\+/g, '-')
.replace(/\//g, '_')
.replace(/=/g, '');
Pemecahan Masalah: Kesalahan Padding
| Kesalahan | Penyebab | Solusi |
|---|---|---|
binascii.Error: Incorrect padding |
= padding hilang |
Tambahkan = hingga panjang kelipatan 4 |
TypeError pada atob() |
Karakter non-ASCII | Gunakan TextEncoder terlebih dahulu |
| Output terkorupsi | Melewatkan enkoding UTF-8 | Selalu enkode ke byte sebelum Base64 |
Berdasarkan AskPython, hitung padding yang hilang: padding_needed = (4 - len(data) % 4) % 4, lalu tambahkan sejumlah = tersebut.
Kasus Penggunaan: JWT dan Data URI
Struktur JWT (JSON Web Token)
| Bagian | Konten | Enkoding |
|---|---|---|
| Header | Algoritma + tipe token | Base64URL |
| Payload | Klaim (data pengguna, kedaluwarsa) | Base64URL |
| Signature | Tanda tangan HMAC atau RSA | Base64URL |
JWT sering dimulai dengan eyJ — enkoding Base64URL dari { (kurung buka JSON).

Base64 vs. Base64URL Berdasarkan Kasus Penggunaan
| Kasus Penggunaan | Enkoding | Padding |
|---|---|---|
| Token JWT | Base64URL | Dihilangkan |
| Data URI (gambar tertanam) | Base64 Standar | Wajib |
| HTTP Basic Auth | Base64 Standar | Wajib |
| Parameter query URL | Base64URL | Dihilangkan |
Kesimpulan
4 langkah: byte UTF-8 → Base64 → ganti +/ ke -_ → hapus padding. Gunakan TextEncoder di JavaScript, base64.urlsafe_b64encode() di Python, Buffer di Node.js. Ikuti RFC 4648 untuk kompatibilitas lintas sistem. Base64URL adalah enkoding, bukan enkripsi — gunakan AES-256 atau TLS untuk keamanan.
FAQ
Apakah Base64URL sama dengan enkripsi?
Tidak. Base64URL adalah enkoding yang dapat dibalik — siapa pun dapat mendekodenya tanpa kunci. Gunakan AES-256 atau TLS/SSL untuk mengamankan data sensitif.
Mengapa Base64URL gagal di dekoder Base64 standar?
Dekoder standar mengharapkan +, /, dan = padding. Base64URL menggunakan -, _, dan menghilangkan padding. Balikkan pergantian karakter dan kembalikan padding sebelum mendekode.
Mengapa padding dihilangkan dalam JWT?
Karakter = menjadi %3D dalam URL, membuat string lebih panjang dan lebih sulit dibaca. RFC 4648 mengizinkan penghilangan karena dekoder dapat merekonstruksi panjang asli tanpa penanda padding.

Tinggalkan Balasan