Encoder & Decoder Base64 / URL / JWT
Encode dan decode Base64 atau URL, serta periksa header dan payload JWT di browser.
Cara menggunakan
- Tempel atau ketik input Anda di kotak "Teks atau JWT": teks biasa untuk di-encode, string Base64 atau string ber-percent-encoding untuk di-decode, atau JWT untuk diperiksa.
- Klik "Encode Base64" atau "Decode Base64" untuk mengonversi antara teks dan Base64, atau "Encode URL" atau "Decode URL" untuk menambahkan atau menghapus percent-encoding. Hasilnya, atau pesan kesalahan, muncul di kotak "Output".
- Untuk memeriksa token, tempel token dengan atau tanpa awalan Bearer lalu klik "Decode JWT". Header dan payload ditampilkan sebagai JSON berindentasi, dan klaim iat, nbf, dan exp yang ada di payload dicantumkan di "Klaim waktu JWT", dengan nilai numerik dikonversi ke UTC dan waktu lokal Anda.
- Klik "Salin hasil" untuk menyalin output. Untuk membalik encoding, tempel teks hasil encode ke kotak "Teks atau JWT" lalu klik tombol decode yang sesuai. Decode lalu encode ulang belum tentu menghasilkan teks yang persis sama dengan aslinya: Base64 URL-safe atau tanpa padding kembali dalam alfabet standar dengan padding = jika diperlukan, dan "Encode URL" mengubah + yang dibiarkan oleh "Decode URL" menjadi %2B.
Pertanyaan umum
Apakah teks atau token yang saya tempel dikirim ke suatu tempat?
Tidak. Encode dan decode berjalan di browser Anda dengan JavaScript, dan apa yang Anda masukkan tidak dikirim ke LeedyBox. JWT sering dipakai sebagai kredensial login dan dapat digunakan oleh siapa pun yang memilikinya sampai token tersebut kedaluwarsa atau dicabut, jadi perlakukan token yang masih berlaku seperti kata sandi dan jangan membagikannya di tangkapan layar atau obrolan.
Mengapa "Decode Base64" menyatakan bahwa data bukan teks UTF-8 yang valid?
"Decode Base64" menampilkan byte hasil decode sebagai teks UTF-8 dan berhenti dengan kesalahan ini jika byte tersebut bukan UTF-8 yang valid, misalnya untuk gambar PNG atau JPEG, sebagian besar PDF, dan data terkompresi, serta sering juga untuk teks yang disimpan dalam encoding lain seperti Latin-1 atau Shift_JIS. Alat ini tidak menyimpan byte hasil decode sebagai file, jadi gunakan untuk Base64 yang berisi teks. Data URI seperti data:image/png;base64,... ditolak sebagai Base64 tidak valid karena titik dua, titik koma, dan koma bukan karakter Base64.
Apakah Base64 URL-safe dan nilai tanpa padding didukung?
Ya, saat decode: "Decode Base64" menerima alfabet standar (+ dan /) dan alfabet URL-safe (- dan _), dengan atau tanpa padding =, serta mengabaikan spasi dan pergantian baris. "Encode Base64" menghasilkan alfabet standar dengan padding; untuk bentuk URL-safe yang dipakai di JWT, ganti + dengan -, / dengan _, dan hapus tanda = di akhir. Teks di-encode sebagai UTF-8 persis seperti yang dimasukkan, sehingga spasi atau pergantian baris di akhir mengubah hasilnya, dan pergantian baris di dalam kotak di-encode sebagai LF.
Haruskah saya meng-encode seluruh URL dengan "Encode URL"?
Biasanya tidak. "Encode URL" bekerja seperti encodeURIComponent di JavaScript: semua karakter di-percent-encode kecuali A–Z, a–z, 0–9, dan - _ . ! ~ * ' ( ), sehingga karakter / ? & = : dan # yang membentuk struktur URL juga ikut di-encode. Gunakan untuk satu bagian saja, misalnya nilai satu parameter kueri. Spasi menjadi %20 dan karakter non-ASCII di-encode sebagai byte UTF-8-nya, jadi é menjadi %C3%A9.
Mengapa tanda plus tidak diubah menjadi spasi, dan kapan "Decode URL" menampilkan kesalahan?
"Decode URL" bekerja seperti decodeURIComponent di JavaScript: urutan escape %XX di-decode, sedangkan + dibiarkan tidak berubah, karena dalam sintaks URL umum (RFC 3986) + tidak berarti spasi. Data formulir HTML (application/x-www-form-urlencoded), yang dipakai banyak string kueri, meng-encode spasi sebagai +, jadi ganti setiap + dengan spasi sebelum men-decode data seperti itu; tanda plus yang sebenarnya dalam format tersebut ditulis sebagai %2B dan tetap di-decode dengan benar. Kesalahan muncul jika % tidak diikuti dua digit heksadesimal, seperti pada 50% off, atau jika byte yang di-escape bukan UTF-8 yang valid, seperti pada %E2%82.
Token apa saja yang dapat dibaca oleh "Decode JWT"?
Token dalam bentuk ringkas tiga bagian header.payload.signature yang dipakai JWT bertanda tangan (JWS), termasuk token tanpa tanda tangan yang bagian tanda tangannya kosong. Bagian tanda tangan tidak diperiksa, jadi token yang berhasil di-decode bukan bukti bahwa token itu asli. Token terenkripsi (JWE) terdiri dari lima bagian dan payload-nya tidak dapat dibaca tanpa kunci, sehingga menghasilkan kesalahan format. Header atau payload yang tidak dapat di-decode dari Base64 menjadi JSON, atau payload yang berupa nilai biasa seperti string atau angka, bukan objek JSON, menghasilkan pesan "Kesalahan membaca JWT". Bilangan bulat yang lebih besar dari 9.007.199.254.740.991 di header atau payload dapat dibulatkan saat browser mengurai JSON, sehingga ID numerik yang panjang mungkin ditampilkan dengan beberapa digit terakhir yang berbeda.
Bagaimana waktu exp, nbf, dan iat ditampilkan, dan kapan token ditandai kedaluwarsa?
Nilainya dibaca sebagai waktu Unix dalam detik, sesuai definisi standar JWT (RFC 7519), dan ditampilkan dalam UTC dan waktu lokal Anda. "KEDALUWARSA" dan "Belum berlaku" membandingkan exp dan nbf dengan jam perangkat Anda pada saat Anda mengklik "Decode JWT", tanpa toleransi untuk selisih jam, jadi jika jam perangkat salah, statusnya juga salah. Server dapat memberikan sedikit toleransi, sering kali tidak lebih dari beberapa menit, sehingga di sekitar waktu exp atau nbf, keputusan server bisa berbeda dari status yang ditampilkan di sini. Waktu yang ditulis sebagai string, seperti "1700000000", dilaporkan sebagai bukan timestamp Unix numerik yang valid.