Cara menggunakan
- Tempel string yang ingin Anda periksa ke kolom masukan.
- Baca hasilnya: valid atau tidak valid, varian yang terdeteksi (standar atau aman untuk URL), dan ukuran hasil dekode.
- Jika ada masalah yang tercantum, gunakan posisi yang dilaporkan untuk menemukan karakter tidak valid, spasi kosong, atau padding yang salah tempat.
- Lihat tipe isi yang terdeteksi untuk mengetahui apakah data tersebut berupa teks atau file seperti PNG, PDF, atau ZIP.
Syarat Base64 yang valid
- Alfabet. Hanya
A-Z,a-z,0-9, dan dua karakter tambahan yang diizinkan:+dan/pada Base64 standar,-dan_pada Base64URL. String yang mencampur kedua pasangan tersebut biasanya sudah rusak atau disusun dari dua sumber berbeda. - Padding. Tanda
=hanya boleh muncul di bagian akhir, paling banyak dua kali. Padding di tengah biasanya berarti dua nilai terenkode telah digabungkan. - Panjang. Dengan padding, panjangnya merupakan kelipatan 4. Tanpa padding, panjang berapa pun dapat diterima kecuali 4n + 1: satu karakter sisa hanya memuat 6 bit, tidak cukup untuk satu byte.
Decoder yang ketat menambahkan satu aturan lagi: bit rendah yang tidak terpakai pada karakter terakhir harus bernilai nol. Banyak decoder mengabaikan bit tersebut, tetapi sebagian, seperti base64.StdEncoding.Strict() di Go, menolak string semacam itu.
Error umum dan cara memperbaikinya
| Masalah | Penyebab umum | Solusi |
|---|---|---|
| Karakter tidak valid | Tanda kutip, garis miring terbalik, atau escape %2B dan %3D yang ikut tersalin bersama nilainya | Hapus karakter tambahan atau dekode URL terlebih dahulu |
| Spasi di tengah | + berubah menjadi spasi saat nilai melewati URL atau formulir | Kembalikan +, atau gunakan Base64URL untuk URL |
| Panjang 4n + 1 | Nilai terpotong oleh batas kolom, baris log, atau salinan yang tidak lengkap | Salin ulang nilai secara lengkap |
| Padding di tengah | Dua string Base64 digabungkan menjadi satu | Pisahkan dan dekode setiap bagian secara terpisah |
| Jeda baris | Pembungkusan baris MIME atau PEM | Biasanya tidak berbahaya; hapus jika diperlukan satu baris |
Valid tidak berarti bermakna
Base64 tidak memiliki header maupun checksum, jadi validitas hanya menyatakan bahwa sebuah string dapat didekode. Banyak kata biasa pun lolos: empat huruf apa pun membentuk kelompok yang valid. Itulah sebabnya validator juga mendekode data dan melaporkan ukuran serta tipe isinya. Teks yang dapat dibaca atau signature file yang dikenal seperti PNG, PDF, atau ZIP merupakan bukti kuat bahwa string tersebut memang Base64; segelintir byte acak bukanlah bukti. Untuk menguji pengodean lain juga, coba pendeteksi pengodean.
Memvalidasi Base64 dalam kode
// JavaScript: Base64 standar dengan padding (juga cocok dengan string kosong)
/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/
# Python: munculkan error alih-alih melewati karakter tidak valid
import base64, binascii
try:
base64.b64decode(s, validate=True)
except binascii.Error:
print('invalid')
Pertanyaan yang sering diajukan
Mengapa kata biasa dilaporkan sebagai Base64 yang valid?
test didekode menjadi tiga byte. Periksa tipe isi yang terdeteksi: jika hasilnya bukan teks yang dapat dibaca maupun tipe file yang dikenal, kemungkinan besar masukan tersebut memang bukan Base64.Apakah Base64 dengan spasi atau jeda baris valid?
MIME dan PEM membungkus Base64 menjadi beberapa baris, dan sebagian besar decoder melewati spasi kosong. Namun, kolom JSON, header HTTP, JWT, dan data URI mengharapkan satu string utuh tanpa jeda. Validator mencantumkan spasi kosong secara terpisah agar Anda dapat menilai apakah hal itu berpengaruh di tempat string tersebut akan digunakan.
Apakah Base64 tanpa padding = valid?
= hingga panjangnya menjadi kelipatan 4. String tanpa padding dengan panjang 4n + 1 karakter tidak pernah valid.Bagaimana cara memeriksa apakah sebuah string adalah Base64 di JavaScript?
atob() di dalam try/catch. Perlu diingat bahwa atob() memunculkan InvalidCharacterError untuk masukan yang salah, tetapi diam-diam menerima spasi kosong dan padding yang hilang, serta tidak menerima karakter aman untuk URL.