Sebagian bit karakter terakhir tidak membawa data

RFC 4648 §3.5 mewajibkan encoder yang sesuai mengisi bit padding dengan nol. Untuk satu byte input, hanya dua bit teratas karakter Base64 kedua membawa data; empat sisanya bit padding. g memiliki indeks 32, 100000; h memiliki indeks 33, 100001. Byte f adalah 01100110 dan bit datanya sama pada kedua representasi. Zg== merupakan keluaran kanonis; Zh== memiliki bit padding bukan nol. Karakter = di akhir berbeda dari bit yang dibuang.

Zg== dan Zh== berbeda pada empat bit terakhir tetapi memulihkan byte f yang sama
Diagram bit buatan sendiri. Biru menandai data; abu-abu menandai bit padding yang dibuang. 01100110 adalah byte contoh publik f.

RFC 4648 §3.5, §4: Canonical Encoding / Base64

Periksa dekode dan encoding ulang

Dekode Base64 toleran WHATWG Infra membuang empat bit terakhir dari kelompok tersisa 12 bit, atau dua dari kelompok 18 bit. HTML atob memakai algoritme ini. Moyoutil memulihkan byte dengan atob lalu membaca teks UTF-8. Contoh yang dijalankan menghasilkan f untuk Zg== dan Zh==, serta fo untuk Zm8= dan Zm9=. Encoding ulang menghasilkan Zg== dan Zm8=. Kode berikut mengodekan ulang byte langsung, tanpa mengubah biner sembarang menjadi teks UTF-8.

for (const input of ['Zg==', 'Zh==', 'Zm8=', 'Zm9=']) {
  const bytes = atob(input);
  const canonical = btoa(bytes);
  console.log(input, bytes, canonical, input === canonical);
}
// Zg== f Zg== true
// Zh== f Zg== false
// Zm8= fo Zm8= true
// Zm9= fo Zm8= false

Byte yang sama dan string asli yang sama adalah kondisi berbeda. Tentukan kesamaan yang diperlukan kunci cache atau perbandingan. Jika protokol penerima memerlukan input kanonis, validasi aturannya. Kami tidak menyarankan mengubah string bertanda tangan sebelum verifikasi. Perbandingan ini hanya untuk Base64 standar dengan padding, bukan validator semua protokol.

WHATWG Infra: Forgiving base64 decode

WHATWG HTML: atob

Pertanyaan yang Sering Diajukan

Apakah semua decoder menerima Zh==?

Tidak. RFC 4648 mengizinkan penolakan bit padding bukan nol; spesifikasi yang merujuknya dapat menentukan perilaku. Hasil ini menjelaskan HTML atob dan implementasi Moyoutil saat ini.