Encoder dan Decoder Base64URL

Ubah teks, byte hex, atau file menjadi Base64 yang aman untuk URL dan sebaliknya. Alfabetnya memakai - dan _ sebagai pengganti + dan /, dan padding nonaktif secara default, seperti pada JSON Web Token dan OAuth PKCE.

Berjalan sepenuhnya di browser Anda. Tidak ada yang diunggah.

Cara menggunakan

  1. Pilih Enkode atau Dekode. Varian aman untuk URL sudah terpilih dengan Padding dimatikan.
  2. Ketik atau tempel teks, masukkan byte hex, atau klik Buka file. Hasilnya diperbarui saat Anda mengetik.
  3. Aktifkan Padding hanya jika sistem penerima memerlukan tanda = di bagian akhir.
  4. Salin hasilnya atau unduh.

Apa itu Base64URL?

Base64URL didefinisikan dalam bagian 5 RFC 4648 sebagai "Base 64 Encoding with URL and Filename Safe Alphabet". Cara kerjanya persis seperti Base64 standar, 6 bit per karakter, tetapi menukar dua karakter yang menimbulkan masalah di URL dan path file:

Base64 standarBase64URL
Nilai 62+-
Nilai 63/_
Padding=, wajibbiasanya dihilangkan

Di URL, + dapat dibaca sebagai spasi, / memisahkan segmen path, dan = memisahkan kunci query dari nilainya, sehingga Base64 standar harus dienkode persen sebelum dimasukkan ke dalam tautan. Base64URL tidak memerlukan escape. RFC 4648 mengizinkan padding dihilangkan jika panjangnya sudah diketahui dari konteks, dan sebagian besar spesifikasi yang dibangun di atas Base64URL memang melakukannya.

Penggunaan Base64URL

  • JSON Web Token. Header, payload, dan tanda tangan JWT masing-masing berupa Base64URL tanpa padding (RFC 7515). Baca isinya dengan Decoder JWT.
  • OAuth 2.0 PKCE. code_challenge adalah bentuk Base64URL tanpa padding dari hash SHA-256 atas code verifier (RFC 7636), sehingga panjangnya selalu 43 karakter.
  • JSON Web Key dan WebAuthn. Parameter kunci seperti n, e, x, dan y, serta challenge dan ID kredensial WebAuthn, dipertukarkan dalam bentuk Base64URL.
  • Token, ID, dan nama file. Tautan reset, URL bertanda tangan, dan kunci cache membawa Base64URL tanpa escape; ID acak 16 byte menjadi 22 karakter. Pada sistem file yang tidak peka huruf besar-kecil, sebaiknya gunakan Base32, karena Base64URL bergantung pada huruf besar-kecil.

Konversi antara Base64 dan Base64URL

Kedua varian mengenkode byte yang sama, jadi konversinya hanyalah pertukaran karakter: ganti + dengan - dan / dengan _, lalu hapus = di bagian akhir. Untuk arah sebaliknya, tukar kembali karakternya dan tambahkan = hingga panjangnya menjadi kelipatan 4. Decoder di halaman ini menerima kedua alfabet, dengan atau tanpa padding.

// Node.js 16+
Buffer.from(data).toString('base64url')
Buffer.from(str, 'base64url')

# Python (urlsafe_b64encode tetap menyertakan padding)
base64.urlsafe_b64encode(data).rstrip(b'=')

// Go
base64.RawURLEncoding.EncodeToString(data)

// Java
Base64.getUrlEncoder().withoutPadding().encodeToString(bytes)

Spesifikasi

AlfabetA-Z a-z 0-9 - _
Ukuran keluaran4 karakter per 3 byte (sekitar 133%)
PaddingOpsional, biasanya dihilangkan
StandarRFC 4648 bagian 5
Peka huruf besar-kecilYa

Contoh

Masukan (UTF-8)Keluaran
Hello, World!SGVsbG8sIFdvcmxkIQ
Base64.isQmFzZTY0Lmlz
你好5L2g5aW9

Pertanyaan yang sering diajukan

Apakah Base64URL sama dengan string Base64 yang dienkode URL?
Tidak. Pengodean persen pada Base64 standar mengubah +, /, dan = menjadi %2B, %2F, dan %3D, sehingga string menjadi lebih panjang. Base64URL menggunakan alfabet yang berbeda, jadi tidak memerlukan escape sama sekali. Kedua bentuk ini tidak dapat saling menggantikan tanpa dikonversi.
Apakah Base64URL perlu padding?
Tergantung pada pihak yang menggunakannya. JWT, JSON Web Key, dan PKCE mewajibkan padding dihilangkan, sedangkan urlsafe_b64encode milik Python dan URL encoder bawaan Java menambahkannya. Jika ragu, hilangkan saja; decoder ini menerima kedua bentuk.
Mengapa decoder Base64 standar menolak string Base64URL saya?
Decoder standar yang ketat tidak menerima - dan _, dan sebagian juga mewajibkan padding. Tukar karakternya dan tambahkan tanda = agar panjangnya menjadi kelipatan 4, atau dekode string tersebut di sini.
Bagaimana cara memeriksa code challenge PKCE?
Challenge tersebut adalah BASE64URL(SHA256(code_verifier)) tanpa padding. Dekode di sini dengan keluaran hex: nilai yang benar menghasilkan tepat 32 byte, yang dapat Anda bandingkan dengan hash SHA-256 dari verifier.