Validator Base64

Tempel sebuah string untuk mengetahui apakah string tersebut Base64 yang valid. Validator menyebutkan variannya, menunjukkan karakter tidak valid dan masalah padding, serta memberi tahu Anda isi data setelah didekode.

Berjalan sepenuhnya di browser Anda. Tidak ada yang diunggah.

Cara menggunakan

  1. Tempel string yang ingin Anda periksa ke kolom masukan.
  2. Baca hasilnya: valid atau tidak valid, varian yang terdeteksi (standar atau aman untuk URL), dan ukuran hasil dekode.
  3. Jika ada masalah yang tercantum, gunakan posisi yang dilaporkan untuk menemukan karakter tidak valid, spasi kosong, atau padding yang salah tempat.
  4. 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

MasalahPenyebab umumSolusi
Karakter tidak validTanda kutip, garis miring terbalik, atau escape %2B dan %3D yang ikut tersalin bersama nilainyaHapus karakter tambahan atau dekode URL terlebih dahulu
Spasi di tengah+ berubah menjadi spasi saat nilai melewati URL atau formulirKembalikan +, atau gunakan Base64URL untuk URL
Panjang 4n + 1Nilai terpotong oleh batas kolom, baris log, atau salinan yang tidak lengkapSalin ulang nilai secara lengkap
Padding di tengahDua string Base64 digabungkan menjadi satuPisahkan dan dekode setiap bagian secara terpisah
Jeda barisPembungkusan baris MIME atau PEMBiasanya 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?
Karena memang valid. Deretan karakter alfabet apa pun dengan panjang yang sesuai akan didekode menjadi sejumlah byte; misalnya, kata 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?
Sering kali ya. Base64URL biasanya tidak menyertakan padding, dan RFC 4648 mengizinkan padding dihilangkan jika panjangnya sudah diketahui dari konteks. Beberapa decoder yang ketat tetap mewajibkannya; jika sebuah sistem menolak string tersebut, tambahkan tanda = 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?
Untuk Base64 dengan padding yang ketat, uji string tersebut dengan ekspresi reguler yang mengizinkan kelompok empat karakter alfabet diikuti padding opsional. Cara yang lebih cepat adalah memanggil 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.