Cara Encoding dan Decoding Base64 di Python
Base64 encoding adalah sesuatu yang hampir setiap developer Python pasti temui — encoding file untuk API, menyematkan gambar di HTML, atau mengirim data biner melalui payload JSON. Python memiliki modul base64 bawaan yang menangani semuanya dengan beberapa baris kode.
Dasar: encoding string
Modul base64 bekerja dengan byte, bukan string. Langkah pertama selalu encode string ke byte dengan .encode(), lalu hasilnya dikirim ke base64.b64encode().
import base64
text = "Halo, Dunia!"
encoded = base64.b64encode(text.encode("utf-8"))
print(encoded)
# b'SGFsbywgRHVuaWEh'
# Untuk mendapatkan string alih-alih bytes:
encoded_str = encoded.decode("utf-8")
print(encoded_str)
# SGFsbywgRHVuaWEh
Decoding string Base64
Decoding adalah kebalikannya: panggil base64.b64decode() dengan byte atau string Base64, lalu decode hasilnya kembali ke string jika diperlukan.
import base64
encoded = "SGFsbywgRHVuaWEh"
decoded_bytes = base64.b64decode(encoded)
decoded_str = decoded_bytes.decode("utf-8")
print(decoded_str)
# Halo, Dunia!
b64decode() menerima bytes maupun str, jadi kamu tidak perlu memanggil .encode() pada input terlebih dahulu.
Base64 yang aman untuk URL
Base64 standar menggunakan + dan / yang perlu di-percent-encode di dalam URL. Python menyediakan urlsafe_b64encode() dan urlsafe_b64decode() yang menukar karakter tersebut dengan - dan _.
import base64
data = b"\xfb\xef\xbe" # byte yang menghasilkan + dan / di Base64 standar
standard = base64.b64encode(data).decode()
print(standard) # +++++ (mengandung + dan /)
url_safe = base64.urlsafe_b64encode(data).decode()
print(url_safe) # ---- (menggunakan - dan _)
Gunakan URL-safe encoding setiap kali output akan muncul di URL, nama file, atau cookie.
Encoding file ke Base64
Membaca file dan mengencodenya sangat mudah — buka file dalam mode biner ("rb") agar Python memberikan byte mentah.
import base64
with open("gambar.png", "rb") as f:
encoded = base64.b64encode(f.read()).decode("utf-8")
print(encoded[:60], "...") # 60 karakter pertama
Untuk menyematkan hasilnya di HTML atau CSS:
data_uri = f"data:image/png;base64,{encoded}"
Decoding Base64 kembali ke file
import base64
encoded_str = "iVBORw0KGgo..." # string Base64 kamu
with open("output.png", "wb") as f:
f.write(base64.b64decode(encoded_str))
Menangani error padding
Jika string Base64 yang kamu terima tidak memiliki padding = (beberapa sistem membuangnya), kamu akan mendapat binascii.Error: Incorrect padding. Perbaiki dengan menambahkan padding kembali sebelum decoding:
import base64
def safe_b64decode(s):
# Tambahkan padding jika kurang
s += "=" * (4 - len(s) % 4) if len(s) % 4 else ""
return base64.b64decode(s)
Perbandingan cepat: fungsi mana yang digunakan
| Kasus penggunaan | Fungsi |
|---|---|
| Encoding umum | b64encode / b64decode |
| URL, nama file, cookie | urlsafe_b64encode / urlsafe_b64decode |
| Email / lampiran MIME | encodebytes / decodebytes |
Ringkasan
- Selalu bekerja dalam byte — encode string dengan
.encode("utf-8")terlebih dahulu. - Gunakan
urlsafe_b64encodesaat hasilnya akan masuk ke URL atau nama file. - Perbaiki padding yang hilang dengan menambahkan karakter
=sebelum decoding. - Base64 adalah encoding, bukan enkripsi — jangan gunakan untuk menyembunyikan data sensitif.