Byte yang sama, alfabet berbeda

Base64 standar dalam RFC 4648 memakai + dan / untuk nilai 62 dan 63; Base64url memakai - dan _. Teks ??? menjadi Pz8/ dalam format standar dan Pz8_ dalam format URL. >>> menjadi Pj4+ dan Pj4-. Alat Base64 teks Moyoutil memulihkan string standar, tetapi menolak string berisi - atau _ dengan kesalahan format. Kode Node.js berikut mereproduksi kedua format secara terpisah.

for (const text of ["???", ">>>"]) {
  const bytes = Buffer.from(text, "utf8");
  console.log(bytes.toString("base64"),
              bytes.toString("base64url"));
}
// Pz8/ Pz8_
// Pj4+ Pj4-
Karakter Base64 dan Base64url untuk nilai 62 dan 63, dengan dua contoh teks
Diagram perbandingan alfabet buatan sendiri. Baris bawah menunjukkan hasil pengodean nyata dari masukan rekaan.

RFC 4648 §5: Base64url alphabet

Jangan menentukan format hanya dari tampilannya

foo menjadi Zm9v dalam kedua format. Ketiadaan +, /, -, dan _ tidak membuktikan string itu Base64 standar. Periksa spesifikasi format sistem pembuatnya. Padding merupakan aturan terpisah: RFC 4648 mewajibkannya kecuali spesifikasi yang merujuknya menyatakan lain; RFC 7515 mendefinisikan Base64url JWS tanpa = di akhir. Misalnya, f menjadi Zg== dalam format standar dan Zg dalam format URL tanpa padding.

for (const text of ["foo", "f"]) {
  const bytes = Buffer.from(text, "utf8");
  console.log(bytes.toString("base64"),
              bytes.toString("base64url"));
}
// Zm9v Zm9v
// Zg== Zg

Moyoutil tidak mengonversi Base64url secara otomatis atau memverifikasi tanda tangan JWS. Kode ini membandingkan format. Mendapatkan teks yang terbaca tidak membuktikan tanda tangan valid. Masukan tanda tangan JWS berisi header dan payload asli yang telah dikodekan; jangan mengganti masukan verifikasi dengan versi yang dikodekan ulang.

RFC 7515 §2–3: Base64url and JWS signing input

Pertanyaan yang Sering Diajukan

Bisakah - dan _ dihapus agar string dapat didekode?

Jangan hapus keduanya. Itu karakter data yang mewakili nilai 62 dan 63. Menghapusnya dapat mengubah data asli. Jika membutuhkan Base64 standar yang diterima alat ini, ekspor format tersebut dari sistem asal.