Pengetahuan · Teks, data, dan keamanan
Apa itu encoding Base64?
Jawaban singkat
Base64 adalah cara merepresentasikan data biner hanya dengan 64 karakter yang bisa dicetak: A–Z, a–z, 0–9, + dan /, dengan = sebagai padding. Setiap 3 byte dipecah menjadi empat kelompok 6 bit, lalu setiap kelompok dipetakan ke satu karakter, sehingga "Man" menjadi "TWFu". Base64 membuat data biner aman dikirim lewat saluran yang hanya menerima teks, seperti email, JSON, dan URL, dengan konsekuensi ukurannya bertambah sekitar 33%. Ini encoding, bukan enkripsi.
Buka Base64Cara kerja Base64, langkah demi langkah
Base64 didefinisikan dalam RFC 4648. Karena 64 = 2⁶, setiap karakter keluaran membawa tepat 6 bit, dan 3 byte (24 bit) pas dipetakan ke 4 karakter.
| Langkah | M | a | n |
|---|---|---|---|
| Kode ASCII | 77 | 97 | 110 |
| Biner (masing-masing 8 bit) | 01001101 | 01100001 | 01101110 |
- Gabungkan 24 bitnya:
010011010110000101101110. - Pecah menjadi empat kelompok 6 bit:
010011010110000101101110. - Ubah menjadi angka: 19, 22, 5, 46.
- Cari masing-masing di alfabetnya (0 = A, 25 = Z, 26 = a, 51 = z, 52 = 0, 61 = 9, 62 = +, 63 = /): T, W, F, u.
- Hasil:
TWFu.
Padding dengan =
Jika panjang input bukan kelipatan 3, kelompok terakhir diisi bit nol dan = menandai byte yang kurang, sehingga panjang keluaran selalu kelipatan 4.
| Input | Byte | Base64 |
|---|---|---|
M | 1 | TQ== |
Ma | 2 | TWE= |
Man | 3 | TWFu |
Hello | 5 | SGVsbG8= |
é (byte UTF-8 C3 A9) | 2 | w6k= |
Panjang hasil encoding adalah 4 × ceil(n ÷ 3) karakter untuk n byte. File 1 MB menjadi sekitar 1,33 MB teks, dan email MIME menambahkan baris baru setiap 76 karakter, sehingga overhead-nya sedikit lebih tinggi.
Di mana Base64 dipakai
- Lampiran email: MIME meng-encode file sebagai Base64 karena sistem email awal hanya mengangkut teks 7-bit.
- Data URL: gambar kecil yang disisipkan langsung di HTML atau CSS, ditulis sebagai
data:image/png;base64,iVBORw0KGgo.... - API JSON dan XML yang perlu mengangkut data biner seperti gambar, kunci, atau sertifikat.
- JSON Web Token (JWT), yang header dan payload-nya berupa JSON yang di-encode dengan Base64url.
- File PEM untuk sertifikat dan kunci TLS, yang membungkus Base64 di antara baris
-----BEGIN CERTIFICATE-----. - Autentikasi HTTP Basic, yang mengirim
username:passworddalam bentuk Base64.
Menyisipkan gambar sebagai data URL menghemat satu permintaan jaringan, tetapi menambah ukurannya 33% dan mencegah cache terpisah, sehingga biasanya hanya layak untuk gambar yang sangat kecil.
Base64 vs Base64url dan encoding lainnya
Base64 standar memakai + dan /, yang punya arti khusus di URL dan nama file. Varian aman-URL dalam RFC yang sama menggantinya dengan - dan _, dan sering menghilangkan padding =.
| Encoding | Karakter | Overhead ukuran | Contoh penggunaan |
|---|---|---|---|
| Base16 (hex) | 0–9, A–F | 100% | Hash, kode warna |
| Base32 | A–Z, 2–7 | 60% | Kunci rahasia autentikasi dua faktor |
| Base64 | A–Z, a–z, 0–9, +, / | 33% | Email, data URL, PEM |
| Base64url | A–Z, a–z, 0–9, -, _ | 33% | JWT, parameter URL |
Kesalahan umum
- Teks harus diubah menjadi byte terlebih dahulu, biasanya sebagai UTF-8. Di JavaScript,
btoa()memunculkan error pada karakter di luar Latin-1 seperti emoji atau aksara Tionghoa kecuali string-nya di-encode ke UTF-8 terlebih dahulu. - Mencampur alfabet standar dan aman-URL menyebabkan error saat decode; ganti
-dan_dengan+dan/sebelum memakai decoder standar. - Padding yang hilang bisa membuat decoder yang ketat gagal; tambahkan
=sampai panjangnya kelipatan 4. - Baris baru dari encoding gaya email harus dihapus sebelum sebagian decoder mau menerima string-nya.
FAQ
Mengapa Base64 membuat data lebih besar?
Setiap 3 byte menjadi 4 karakter, dan setiap karakter disimpan sebagai satu byte utuh, sehingga keluarannya sekitar 33% lebih besar daripada input.
Apakah Base64 aman?
Tidak. Base64 tidak menyembunyikan apa pun; decode tidak memerlukan kunci. Gunakan enkripsi sungguhan seperti AES untuk melindungi data, dan Base64 hanya untuk mengangkut hasilnya sebagai teks.
Apa arti tanda = di akhir Base64?
Itu padding. Satu = berarti kelompok terakhir berisi 2 byte, dan == berarti hanya berisi 1 byte.
Bagaimana cara mengenali string Base64?
Isinya hanya huruf, angka, + dan / (atau - dan _), panjangnya biasanya kelipatan 4, dan bisa diakhiri satu atau dua tanda =. String yang diawali eyJ sering kali berupa JSON yang di-encode Base64, karena teks JSON yang diawali {" menghasilkan string yang diawali eyJ.