All Tools / Blog / Cara Encoding dan Decoding Base64 di Python

Cara Encoding dan Decoding Base64 di Python

2 min read

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_b64encode saat 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.