Soal 1Apa bahaya memanggil pickle.loads pada data pickle yang tidak terpercaya?
pickle dan base64 — Serialisasi Objek dan Konversi Binary-ke-Text
pickle.dumps / loads mengubah dict atau class sendiri jadi bytes dan memulihkan utuh, base64.b64encode / b64decode menumpangkan biner ke jalur teks sambil dicek tipe balik.
Kita akan membahas dua modul yang dipakai saat memindahkan data melalui file atau lewat jaringan. pickle menyimpan objek Python (dict, instance class, dll.) dalam bentuk yang dapat dipulihkan sepenuhnya nanti, sementara base64 mengkonversi data binary seperti gambar atau audio menjadi string "alfanumerik plus dua simbol" supaya kamu dapat menjatuhkannya langsung ke email, JSON, atau URL. Keduanya modul standard library untuk konversi data di batas internal atau transport eksternal.
Memilah untuk apa setiap modul
Kedua modul terbagi alami berdasarkan kombinasi input/output. Pakai diagram di bawah untuk menangkap gambaran besar, lalu kita akan menggali kegunaan tipikal dan API di setiap bagian.
pickle — Konversi Objek Python Langsung ke Bytes
pickle adalah modul standard library yang mengkonversi objek Python ke bentuk yang dapat dipulihkan sepenuhnya nanti. Hasilnya adalah nilai bytes (urutan integer kontigu dari 0 hingga 255 — tipe untuk menangani "urutan angka" alih-alih "urutan karakter" seperti string). Bytes adalah format dasar untuk situasi di mana mesin, bukan manusia, akan membaca data — menyimpan ke file, mengirim lewat jaringan, menyerahkan data ke proses lain.
Tidak seperti json, kekuatan pickle adalah dapat menyimpan bukan hanya dict / list / string / angka tetapi juga instance class custom dan objek fungsi, yang membuatnya berguna untuk menyimpan model ML atau meneruskan objek antar proses Python.
Jangan pernah loads data pickle dari orang lain
pickle.loads dapat mengeksekusi kode Python sembarang, jadi memberikan bytes dari sumber yang tidak terpercaya menjadi kerentanan eksekusi kode sembarang. Batasi diri untuk skenario "saya buat, saya baca kembali" dan jangan pernah memakainya pada data yang diterima lewat jaringan atau dari orang lain. Untuk komunikasi eksternal, pakai json saja.
| Fungsi | Peran | Catatan |
|---|---|---|
| pickle.dumps(obj) | objek Python → bytes | mengembalikan bytes (bukan str) |
| pickle.loads(b) | bytes → objek Python | hanya sumber terpercaya |
| pickle.dump(obj, file) | tulis ke file | buka dalam mode binary open(..., "wb") |
| pickle.load(file) | baca dari file | buka dalam mode binary open(..., "rb") |
base64 — Pindahkan Data Binary Lewat Teks
base64 adalah modul yang mengkonversi data binary sembarang menjadi string "alfanumerik plus dua simbol". Karena 3 bytes menjadi 4 karakter, ukuran tumbuh sekitar 1,33×, tetapi banyak dipakai dalam situasi di mana kamu perlu membawa data binary lewat channel teks-saja, seperti lampiran email, menyisipkan gambar di JSON atau URL, atau menyimpan bytes di SQL.
Dua API dasar:
| Fungsi | Input | Mengembalikan |
|---|---|---|
| base64.b64encode(bytes) | bytes (data sumber) | bytes ter-encode Base64 |
| base64.b64decode(Base64) | bytes / str (bentuk Base64) | bytes asli |
= untuk kekurangan.import base64
# bytes → Base64
binary = b"Python is fun!"
encoded = base64.b64encode(binary)
print(encoded) # b'UHl0aG9uIGlzIGZ1biE='
print(encoded.decode()) # UHl0aG9uIGlzIGZ1biE= (dikonversi ke str)
# Base64 → bytes
decoded = base64.b64decode(encoded)
print(decoded) # b'Python is fun!'
print(decoded == binary) # True
Untuk URL, pakai urlsafe_b64
b64encode standar memuat + dan /, jadi menyisipkannya langsung ke URL atau kunci JSON membutuhkan escape. Untuk URL dan JSON, pilih base64.urlsafe_b64encode — ia menukar + → - dan / → _ untuk memberikan varian yang URL-safe. Pakai base64.urlsafe_b64decode untuk memulihkan.
Cek Pemahaman
Jawab setiap pertanyaan satu per satu.
Soal 2Apa tipe nilai kembalian pickle.dumps(obj)?
Soal 3Fungsi mana yang terbaik ketika kamu ingin meletakkan string base64 di parameter query URL?