Cara menggunakan
- Pilih Enkode atau Dekode. Varian aman untuk URL sudah terpilih dengan Padding dimatikan.
- Ketik atau tempel teks, masukkan byte hex, atau klik Buka file. Hasilnya diperbarui saat Anda mengetik.
- Aktifkan Padding hanya jika sistem penerima memerlukan tanda = di bagian akhir.
- 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 standar | Base64URL | |
|---|---|---|
| Nilai 62 | + | - |
| Nilai 63 | / | _ |
| Padding | =, wajib | biasanya 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_challengeadalah 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, dany, 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
| Alfabet | A-Z a-z 0-9 - _ |
|---|---|
| Ukuran keluaran | 4 karakter per 3 byte (sekitar 133%) |
| Padding | Opsional, biasanya dihilangkan |
| Standar | RFC 4648 bagian 5 |
| Peka huruf besar-kecil | Ya |
Contoh
| Masukan (UTF-8) | Keluaran |
|---|---|
Hello, World! | SGVsbG8sIFdvcmxkIQ |
Base64.is | QmFzZTY0Lmlz |
你好 | 5L2g5aW9 |
Pertanyaan yang sering diajukan
Apakah Base64URL sama dengan string Base64 yang dienkode URL?
+, /, 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?
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?
- 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?
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.