Caesar cipher python adalah latihan klasik untuk memahami dasar kriptografi: setiap huruf pada pesan digeser sejumlah posisi tetap di dalam alfabet. Sandi ini tidak layak melindungi data nyata, tetapi sangat berguna untuk mempelajari konsep plaintext, ciphertext, kunci, dan serangan brute force. Artikel ini menjelaskan cara kerjanya dan cara menulisnya dengan benar di Python.
Apa Itu Caesar Cipher?
Caesar cipher adalah sandi substitusi: setiap huruf diganti huruf lain yang posisinya bergeser sejumlah tertentu. Namanya berasal dari Julius Caesar, yang menurut sejarawan Romawi Suetonius mengamankan pesan militernya dengan menggeser setiap huruf sebanyak tiga posisi. Variasi paling dikenal hari ini adalah ROT13, yaitu pergeseran 13 huruf, yang dipakai untuk menyamarkan spoiler di forum, bukan untuk mengamankan apa pun.
Jumlah pergeseran itulah yang disebut kunci. Dengan kunci 3, huruf A menjadi D, B menjadi E, dan seterusnya. Karena alfabet Latin berjumlah 26 huruf, ujung alfabet "berputar" kembali ke awal: X menjadi A, Y menjadi B, Z menjadi C.
Cara Kerja Pergeseran Huruf
Secara matematis, setiap huruf diberi nomor 0 sampai 25 (A = 0, B = 1, dan seterusnya). Enkripsi menambahkan kunci ke nomor itu lalu mengambil sisa bagi 26. Dekripsi mengurangkannya dengan cara yang sama. Contoh dengan kunci 3: kata HELLO menjadi KHOOR, karena H menjadi K, E menjadi H, L menjadi O, dan O menjadi R.
Operasi sisa bagi (modulo) inilah yang sering terlupa oleh pemula. Tanpa modulo, huruf seperti X, Y, dan Z akan menghasilkan nomor di atas 25, lalu program berhenti dengan kesalahan indeks atau menampilkan karakter yang salah.
Membuat Caesar Cipher Python Langkah demi Langkah
Fungsi ord() mengubah karakter menjadi kode angka Unicode dan chr() mengembalikannya, seperti dijelaskan di dokumentasi fungsi bawaan Python. Kode berikut menangani huruf besar dan huruf kecil, serta membiarkan spasi, angka, dan tanda baca tetap seperti aslinya.
def geser(teks, kunci):
hasil = []
for huruf in teks:
if "a" <= huruf <= "z":
dasar = ord("a")
elif "A" <= huruf <= "Z":
dasar = ord("A")
else:
hasil.append(huruf)
continue
hasil.append(chr((ord(huruf) - dasar + kunci) % 26 + dasar))
return "".join(hasil)
def enkripsi(teks, kunci):
return geser(teks, kunci)
def dekripsi(teks, kunci):
return geser(teks, -kunci)
pesan = "Halo Dunia"
sandi = enkripsi(pesan, 3)
print(sandi) # Kdor Gxqld
print(dekripsi(sandi, 3)) # Halo DuniaDekripsi cukup memanggil fungsi yang sama dengan kunci negatif. Di Python, hasil modulo untuk bilangan negatif tetap berada di rentang 0 sampai 25, sehingga trik ini berjalan benar. Coba ubah kunci menjadi 13 dan jalankan dua kali: Anda akan melihat ROT13 mengembalikan teks asli, karena 13 ditambah 13 sama dengan 26.
Versi interaktif yang meminta masukan pengguna
Agar lebih menyerupai program sungguhan, bungkus fungsi di atas dengan masukan dari pengguna. Pastikan kunci diubah menjadi bilangan bulat dan tangani masukan yang salah, karena program yang menerima teks apa adanya adalah kebiasaan buruk yang sebaiknya tidak Anda bawa ke proyek lain.
try:
kunci = int(input("Kunci (angka): "))
except ValueError:
print("Kunci harus berupa angka bulat.")
else:
teks = input("Pesan: ")
print(enkripsi(teks, kunci))Mengapa Caesar Cipher Python Mudah Dipecahkan?
Ada dua kelemahan mendasar. Pertama, ruang kuncinya hanya 25 pergeseran yang berguna, sehingga siapa pun dapat mencoba semuanya. Kedua, sandi ini hanya menggeser huruf, jadi pola frekuensi huruf bahasa aslinya tetap terlihat di ciphertext. Dua sifat itu membuat Caesar cipher tidak memberi perlindungan nyata, sehingga program Caesar cipher Python hanya cocok sebagai bahan belajar. Untuk memahami kelemahan pertama, Anda bisa mencoba semua kunci pada ciphertext latihan milik Anda sendiri:
for kunci in range(1, 26):
print(kunci, dekripsi(sandi, kunci))Satu dari 25 baris itu akan terbaca sebagai kalimat yang bermakna. Analisis frekuensi bekerja dengan cara berbeda: dalam teks bahasa apa pun, sebagian huruf muncul jauh lebih sering daripada yang lain. Huruf yang paling sering muncul di ciphertext kemungkinan besar adalah pengganti huruf yang paling sering muncul di bahasa aslinya, sehingga kunci dapat ditebak tanpa mencoba semuanya.
Latihan semacam ini Latihan semacam ini sering muncul sebagai soal pemula di kompetisi CTF, yang dibahas di artikel tentang CTF dan platform latihan legal.
Dari Caesar ke Kriptografi Modern
Sandi Vigenere memperbaiki sebagian kelemahan itu dengan memakai pergeseran yang berbeda-beda di setiap posisi sesuai kata kunci yang berulang. Pengulangan tersebut masih bisa dideteksi secara statistik, sehingga Vigenere pun sudah usang. Kriptografi modern bergantung pada algoritma yang diuji publik bertahun-tahun, seperti AES yang distandarkan NIST dalam FIPS 197 dengan kunci 128, 192, atau 256 bit.
Aturan praktisnya: pelajari sandi klasik untuk memahami konsep, tetapi jangan pernah merancang atau menulis algoritma enkripsi sendiri untuk melindungi data sungguhan. Pakai pustaka dan standar yang sudah teruji. Bedakan juga enkripsi, yang bisa dibalik dengan kunci, dari hashing yang satu arah, seperti dijelaskan di perbedaan hashing dan enkripsi. Setelah nyaman dengan latihan ini, lanjutkan ke tools sederhana untuk keamanan dengan Python.
Pertanyaan yang Sering Diajukan
Apakah Caesar cipher masih aman dipakai?
Tidak. Ruang kuncinya hanya 25 kemungkinan dan pola huruf tetap terlihat, sehingga bisa dipecahkan dalam hitungan detik, bahkan tanpa komputer. Pakailah hanya untuk belajar atau permainan sandi.
Apa bedanya Caesar cipher dengan ROT13?
ROT13 adalah Caesar cipher dengan kunci tetap 13. Karena alfabet berjumlah 26 huruf, menerapkan ROT13 dua kali mengembalikan teks asli, sehingga enkripsi dan dekripsinya identik.
Bagaimana cara membuat Caesar cipher yang bisa memproses huruf besar dan kecil?
Tentukan dasar penghitungan sesuai jenis hurufnya, yaitu kode huruf a atau huruf A, lalu geser dengan modulo 26. Karakter selain huruf dibiarkan, seperti pada fungsi geser di atas.
Apa bedanya Caesar cipher dengan Vigenere?
Caesar memakai satu pergeseran untuk seluruh pesan. Vigenere memakai kata kunci sehingga pergeserannya berganti-ganti di tiap posisi. Vigenere lebih sulit dipecahkan, tetapi pola pengulangan kata kuncinya masih bisa dianalisis, jadi keduanya hanya cocok untuk belajar.
Kesimpulan
Caesar cipher python kecil dan mudah, tetapi mengajarkan gagasan yang terus dipakai di kriptografi modern: kunci, algoritma, dan ruang kunci yang harus cukup besar. Jika Anda ingin melanjutkan ke topik keamanan lain secara terstruktur, lihat kursus di Linuxhackingid.
Setiap artikel ditinjau pimpinan praktik yang menangani pekerjaannya sebelum terbit.
