Encode - Decode Base64
Ubah data biner menjadi teks aman-URL dan kembali.
Pahami konsepnya
Base64 merepresentasikan data biner dengan 64 karakter teks (A–Z, a–z, 0–9, + dan /) sehingga bisa lewat media yang hanya menerima teks: JSON, header HTTP, data-URL gambar, atau konten email. Setiap 3 byte menjadi 4 karakter — ukuran hasil selalu sekitar 4/3 dari asal.
Di Go, keduanya tinggal satu baris: base64.StdEncoding.EncodeToString(data) dan base64.StdEncoding.DecodeString(teks). Paketnya bekerja pada []byte; string cukup dikonversi lewat []byte(s).
Varian StdEncoding memakai + dan / yang bermasalah di URL. Untuk data yang akan menempati alamat web, gunakan URLEncoding (- dan _) atau RawURLEncoding tanpa padding =. Memilih varian yang salah biasanya berujuk pada hasil decode yang gagal diam-diam — selalu cocokkan encoder dan decodernya.
Coba contoh kode
package main
import (
"encoding/base64"
"fmt"
)
func main() {
asli := []byte("rahasia kecil")
kode := base64.StdEncoding.EncodeToString(asli)
fmt.Println(kode) // cmFodGFzaWEga2VjaWw=
balik, _ := base64.StdEncoding.DecodeString(kode)
fmt.Println(string(balik)) // rahasia kecil
}EncodeToString dan DecodeString saling melengkapi — data biner masuk, teks aman keluar, dan sebaliknya tanpa kehilangan satu byte pun. Tanda = di akhir adalah padding agar panjang hasil kelipatan empat. DecodeString mengembalikan error untuk teks yang bukan base64 valid — periksa bila sumbernya tidak dipercaya.
Varian aman-URL
func main() {
data := []byte{0xfb, 0xff, 0xbe, 0x01}
std := base64.StdEncoding.EncodeToString(data)
url := base64.URLEncoding.EncodeToString(data)
fmt.Println(std) // +/++AQ==
fmt.Println(url) // -_-_AQ==
}Byte biner ini menghasilkan + dan / pada StdEncoding — karakter yang berbahaya di query string karena berarti spasi dan pemisah path. URLEncoding menggantinya dengan - dan _ sehingga hasil aman ditanam langsung dalam URL.
Latihan singkat
Uji: encode data biner berikut — program harus mencetak persis `+/++AQ==`.