Penyandi/Penyahkod Base64
Tukar teks kepada dan dari pengekodan Base64
Pengekod dan Penyahkod Base64
Pengenalan
Base64 adalah skema pengekodan binari-ke-teks yang mewakili data binari dalam format rentetan ASCII. Ia direka untuk membawa data yang disimpan dalam format binari merentasi saluran yang hanya menyokong kandungan teks dengan boleh dipercayai. Pengekodan Base64 menukarkan data binari menjadi satu set 64 watak (oleh itu namanya) yang boleh dihantar dengan selamat melalui protokol berasaskan teks tanpa kerosakan data.
Set watak Base64 terdiri daripada:
- Huruf besar A-Z (26 watak)
- Huruf kecil a-z (26 watak)
- Digit 0-9 (10 watak)
- Dua watak tambahan, biasanya "+" dan "/" (2 watak)
Alat ini membolehkan anda dengan mudah mengekod teks ke format Base64 atau menyahkod rentetan Base64 kembali kepada teks asalnya. Ia sangat berguna untuk pemaju, profesional IT, dan sesiapa yang bekerja dengan data yang perlu dihantar dengan selamat merentasi saluran berasaskan teks.
Cara Pengekodan Base64 Berfungsi
Proses Pengekodan
Pengekodan Base64 berfungsi dengan menukarkan setiap kumpulan tiga bait (24 bit) data binari menjadi empat watak Base64. Proses ini mengikuti langkah-langkah berikut:
- Tukar teks input kepada representasi binarinya (menggunakan pengekodan ASCII atau UTF-8)
- Kumpulkan data binari ke dalam segmen 24 bit (3 bait)
- Bahagikan setiap segmen 24 bit kepada empat kumpulan 6 bit
- Tukar setiap kumpulan 6 bit kepada watak Base64 yang sepadan
Apabila panjang input tidak boleh dibahagikan dengan 3, padding dengan watak "=" ditambah untuk mengekalkan nisbah 4:3 panjang output kepada input.
Perwakilan Matematik
Untuk urutan bait , watak Base64 yang sepadan dikira sebagai:
Di mana mewakili watak ke- dalam abjad Base64.
Proses Penyahkodan
Penyahkodan Base64 membalikkan proses pengekodan:
- Tukar setiap watak Base64 kepada nilai 6 bitnya
- Gabungkan nilai 6 bit ini
- Kumpulkan bit kepada kumpulan 8 bit (bait)
- Tukar setiap bait kepada watak yang sepadan
Padding
Apabila bilangan bait untuk dikodkan tidak boleh dibahagikan dengan 3, padding digunakan:
- Jika terdapat satu bait yang tinggal, ia ditukarkan kepada dua watak Base64 diikuti dengan "=="
- Jika terdapat dua bait yang tinggal, ia ditukarkan kepada tiga watak Base64 diikuti dengan "="
Contoh
Mari kita kodkan teks "Hello" ke Base64:
- Representasi ASCII bagi "Hello": 72 101 108 108 111
- Representasi binari: 01001000 01100101 01101100 01101100 01101111
- Pengelompokan kepada kumpulan 6 bit: 010010 000110 010101 101100 011011 000110 1111
- Kumpulan terakhir hanya mempunyai 4 bit, jadi kita tambah padding dengan nol: 010010 000110 010101 101100 011011 000110 111100
- Menukarkan kepada perpuluhan: 18, 6, 21, 44, 27, 6, 60
- Mencari dalam abjad Base64: S, G, V, s, b, G, 8
- Hasilnya adalah "SGVsbG8="
Perhatikan padding "=" di akhir kerana panjang input (5 bait) tidak boleh dibahagikan dengan 3.
Formula
Formula umum untuk mengira panjang rentetan yang dikodkan dalam Base64 adalah:
Di mana mewakili fungsi siling (pembulatan ke atas kepada integer terdekat).
Kes Penggunaan
Pengekodan Base64 digunakan secara meluas dalam pelbagai aplikasi:
-
Lampiran E-mel: MIME (Multipurpose Internet Mail Extensions) menggunakan Base64 untuk mengodkan lampiran binari dalam e-mel.
-
URL Data: Menyematkan imej kecil, fon, atau sumber lain secara langsung dalam HTML, CSS, atau JavaScript menggunakan skema URL
data:
. -
Komunikasi API: Menghantar data binari dengan selamat dalam muatan JSON atau format API berasaskan teks lain.
-
Menyimpan Data Binari dalam Format Teks: Apabila data binari perlu disimpan dalam XML, JSON, atau format berasaskan teks lain.
-
Sistem Pengesahan: Pengesahan Asas dalam HTTP menggunakan pengekodan Base64 (walaupun ia bukan untuk keselamatan, hanya untuk pengekodan).
-
Kriptografi: Sebagai sebahagian daripada pelbagai protokol dan sistem kriptografi, sering untuk mengekod kunci atau sijil.
-
Nilai Cookie: Mengesahkan struktur data yang kompleks untuk disimpan dalam cookie.
Alternatif
Walaupun Base64 digunakan secara meluas, terdapat alternatif yang mungkin lebih sesuai dalam situasi tertentu:
-
Base64 Selamat URL: Variasi yang menggunakan "-" dan "_" sebagai ganti "+" dan "/" untuk mengelakkan isu pengkodan URL. Berguna untuk data yang akan disertakan dalam URL.
-
Base32: Menggunakan set 32 watak, menghasilkan output yang lebih panjang tetapi dengan kebolehan bacaan manusia yang lebih baik dan tidak sensitif kepada kes.
-
Pengekodan Hex: Penukaran mudah kepada heksadesimal, yang kurang cekap (menggandakan saiz) tetapi sangat mudah dan banyak disokong.
-
Pemindahan Binari: Untuk fail besar atau apabila kecekapan adalah penting, protokol pemindahan binari langsung seperti HTTP dengan header Content-Type yang sesuai adalah lebih baik.
-
Pemampatan + Base64: Untuk data teks besar, memampatkan sebelum mengekod boleh mengurangkan peningkatan saiz.
-
Penyusunan JSON/XML: Untuk data terstruktur, menggunakan penyusunan JSON atau XML asli mungkin lebih sesuai daripada pengekodan Base64.
Sejarah
Pengekodan Base64 mempunyai akar dalam sistem pengkomputeran awal dan sistem telekomunikasi di mana data binari perlu dihantar melalui saluran yang direka untuk teks.
Spesifikasi rasmi Base64 pertama kali diterbitkan pada tahun 1987 sebagai sebahagian daripada RFC 989, yang mendefinisikan E-mel yang Ditingkatkan Privasi (PEM). Ini kemudian dikemas kini dalam RFC 1421 (1993) dan RFC 2045 (1996, sebagai sebahagian daripada MIME).
Istilah "Base64" berasal dari hakikat bahawa pengekodan menggunakan 64 watak ASCII yang berbeza untuk mewakili data binari. Pilihan 64 watak ini adalah sengaja, kerana 64 adalah kuasa 2 (2^6), yang menjadikan penukaran antara binari dan Base64 cekap.
Seiring berjalannya waktu, beberapa variasi Base64 telah muncul:
- Base64 Standard: Seperti yang ditakrifkan dalam RFC 4648, menggunakan A-Z, a-z, 0-9, +, / dan = untuk padding
- Base64 Selamat URL: Menggunakan - dan _ sebagai ganti + dan / untuk mengelakkan isu pengkodan URL
- Base64 Selamat Nama Fail: Serupa dengan Base64 selamat URL, direka untuk digunakan dalam nama fail
- Base64 yang Diubahsuai untuk IMAP: Digunakan dalam protokol IMAP dengan set watak khas yang berbeza
Walaupun telah berusia lebih tiga dekad, Base64 tetap menjadi alat asas dalam pengkomputeran moden, terutama dengan kebangkitan aplikasi web dan API yang bergantung kepada format data berasaskan teks seperti JSON.
Contoh Kod
Berikut adalah contoh pengekodan dan penyahkodan Base64 dalam pelbagai bahasa pengaturcaraan:
// Pengekodan/Penyahkodan Base64 JavaScript
function encodeToBase64(text) {
return btoa(text);
}
function decodeFromBase64(base64String) {
try {
return atob(base64String);
} catch (e) {
throw new Error("Rentetan Base64 tidak sah");
}
}
// Contoh penggunaan
const originalText = "Hello, World!";
const encoded = encodeToBase64(originalText);
console.log("Terkod:", encoded); // SGVsbG8sIFdvcmxkIQ==
try {
const decoded = decodeFromBase64(encoded);
console.log("Didekod:", decoded); // Hello, World!
} catch (error) {
console.error(error.message);
}
Kes-Kes Tepi dan Pertimbangan
Apabila bekerja dengan pengekodan dan penyahkodan Base64, ambil perhatian terhadap pertimbangan penting ini:
-
Karakter Unicode dan Bukan ASCII: Apabila mengekod teks dengan karakter bukan ASCII, pastikan pengekodan karakter yang betul (biasanya UTF-8) sebelum mengekod Base64.
-
Padding: Base64 standard menggunakan padding dengan watak "=" untuk memastikan panjang output adalah kelipatan 4. Beberapa pelaksanaan membenarkan penghapusan padding, yang boleh menyebabkan isu keserasian.
-
Pemisahan Baris: Pelaksanaan Base64 tradisional menyisipkan pemisahan baris (biasanya setiap 76 watak) untuk kebolehan bacaan, tetapi aplikasi moden sering mengabaikannya.
-
Base64 Selamat URL: Base64 standard menggunakan watak "+" dan "/" yang mempunyai makna khas dalam URL. Untuk konteks URL, gunakan Base64 selamat URL yang menggantikan ini dengan "-" dan "_".
-
Ruang Putih: Apabila menyahkod, beberapa pelaksanaan bersifat toleran dan mengabaikan ruang putih, manakala yang lain memerlukan input yang tepat.
-
Peningkatan Saiz: Pengekodan Base64 meningkatkan saiz data sekitar 33% (4 bait output untuk setiap 3 bait input).
-
Prestasi: Pengekodan/penyahkodan Base64 boleh menjadi intensif dari segi pengkomputeran untuk data yang sangat besar. Pertimbangkan pendekatan aliran untuk fail besar.