Untuk apa Base64
Base64 ada untuk memindahkan data biner melalui saluran yang dibuat untuk teks. Email, JSON, XML, atribut HTML, variabel lingkungan, dan header HTTP semuanya mengharapkan karakter yang bisa dicetak, dan banyak di antaranya rusak jika menerima byte mentah seperti null, line feed, atau nilai di atas 127. Base64 menulis ulang urutan byte apa pun hanya dengan 64 simbol aman: A–Z, a–z, 0–9, +, dan /, dengan = sebagai padding.
Tempat-tempat yang umum Anda temui:
- Autentikasi HTTP Basic, di mana
user:passworddikirim sebagaidXNlcjpwYXNzd29yZA==. - JSON Web Token, yang ketiga bagiannya dipisahkan titik dan berupa Base64 URL-safe.
- Lampiran email, yang dikirim sebagai Base64 di dalam pesan MIME.
- Data URI yang menyematkan ikon atau font kecil langsung ke HTML atau CSS.
- Payload API dan file konfigurasi yang perlu membawa sertifikat, kunci, atau blob biner kecil sebagai string.
Base64 adalah encoding, bukan enkripsi. Siapa pun bisa men-decode-nya dalam sedetik, jadi string Base64 di file konfigurasi tidak melindungi apa pun. Jika Anda perlu memastikan data tidak diubah, gunakan hash.
Cara kerja encoding
Encoder mengambil input tiga byte sekaligus, yaitu 24 bit, lalu membaginya menjadi empat kelompok 6 bit. Setiap nilai 6 bit dari 0 hingga 63 memilih satu karakter dari alfabet. Tiga byte masuk, empat karakter keluar, itulah sebabnya hasil Base64 selalu sekitar 33% lebih besar dari input: gambar 30 KB menjadi kira-kira 40 KB teks.
Jika panjang input bukan kelipatan tiga, kelompok terakhir menjadi pendek. Encoder mengisinya dan menandai celahnya dengan satu atau dua tanda =. Itu sebabnya Man di-encode menjadi TWFu, Ma menjadi TWE=, dan M menjadi TQ==.
Teks harus menjadi byte sebelum bisa di-encode, dan alat ini selalu memakai UTF-8 untuk langkah itu. Kata café berukuran lima byte dalam UTF-8 (é memakan dua), dan sebuah emoji memakan empat. Decoding menafsirkan byte sebagai UTF-8 lagi, sehingga teks dalam aksara apa pun kembali utuh tanpa perubahan.
Varian URL-safe
Dua karakter dari alfabet standar menimbulkan masalah di luar teks biasa. Di URL, + bisa dibaca sebagai spasi dan / sebagai pemisah path; di nama file, / sama sekali tidak diizinkan. Alfabet URL-safe yang didefinisikan di RFC 4648 menggantinya dengan - dan _.
Dengan kotak URL-safe dicentang, alat ini melakukan penggantian itu dan juga menghapus padding = di akhir, sesuai format yang diharapkan JWT dan sebagian besar API web. Decoder menerima kedua bentuk: ia mengubah - dan _ kembali dan memulihkan padding yang hilang secara otomatis, jadi Anda bisa langsung menempel segmen JWT dan membaca JSON-nya. Jika JSON itu muncul sebagai satu baris panjang, formatter JSON akan membuatnya mudah dibaca.
Meng-encode file sebagai data URI
Encode file… membaca file di browser Anda dan menghasilkan data URI lengkap seperti data:image/png;base64,iVBORw0KGgo…. Tipe MIME diambil dari yang dilaporkan browser untuk file tersebut; jika tidak bisa ditentukan, dipakai tipe generik application/octet-stream. Anda bisa menempel hasilnya ke <img src>, background-image: url(...) di CSS, atau aturan @font-face.
Data URI masuk akal untuk aset kecil: ikon SVG, gambar placeholder 1–2 KB, logo di tanda tangan email HTML. Untuk yang lebih besar justru merugikan. Teksnya sepertiga lebih besar dari file asli, tidak bisa di-cache terpisah dari halaman yang memuatnya, dan membengkakkan HTML atau CSS yang harus dimuat sebelum apa pun dirender. Batas praktisnya beberapa kilobyte per aset.
Seluruh file dibaca ke memori dan dikonversi sekaligus, jadi file yang sangat besar bisa membuat tab lambat atau kehabisan memori. File tidak diunggah ke mana pun.
Saat decoding gagal
Decoder menampilkan "Base64 tidak valid" jika input berisi karakter di luar alfabet atau panjangnya mustahil. Penyebab umum:
- Awalan data URI. Hapus semuanya hingga dan termasuk koma pada
data:image/png;base64,sebelum men-decode. - Baris baru di dalam string. Encoder MIME memotong Base64 setiap 76 karakter. Jika decoding gagal pada teks yang terpotong-potong, gabungkan dulu menjadi satu baris.
- Kesalahan salin. Karakter terakhir yang hilang atau tanda kutip nyasar dari string JSON sudah cukup untuk merusaknya.
Decoder selalu mengubah hasilnya menjadi teks. Jika data aslinya berupa file biner seperti gambar atau arsip ZIP, hasilnya akan terlihat seperti simbol acak dan tanda tanya; itu wajar, karena byte tersebut memang bukan teks sejak awal.