Anda sudah tahu tentang enkripsi sederhana Caesar Cipher. Buatlah codingnya

Berikut ini adalah pertanyaan dari qed pada mata pelajaran TI untuk jenjang Sekolah Dasar

Anda sudah tahu tentang enkripsi sederhana Caesar Cipher.Buatlah codingnya menggunakan bahasa pemrograman Python/Java.

Batasan:
Hanya boleh terdapat 1 function saja. Tidam perlu function utk dekripsi.
Tetapi, program utama harus mencakup enkripsi dan dekripsi.

Jawaban dan Penjelasan

Berikut ini adalah pilihan jawaban terbaik dari pertanyaan diatas.

Kode Program (Python)

# caesar.py
# oleh: hy
from rich.console import Console
console = Console()
error_console = Console(stderr=True, style="bold bright_red")

def enkripsi_caesar(teks: str, geser = 0):
   hasil = ''
   for c in teks:
       # Validasi teks dulu
       if not(c.isalpha() or c == ' '):
           raise TypeError(f'ERROR: Input mengandung karakter yang tidak diperbolehkan.\n' +\
               '       Caesar Cipher pada program ini hanya menerima karakter alfabet dan spasi.')
       # Enkripsi
       if c != ' ':
           c = \tt {ch}r( \
                   ord('A') + \
                   ( (ord(c) - ord('A') + geser) % 26) \
               )
       hasil += c
   return hasil

### Program Utama ###
if __name__ == '__main__':
   console.print('\n[bold cyan]ENKRIPSI/DEKRIPSI CAESAR CIPHER[/]')
   try:
       mode = console.input('> [E/e]nkripsi atau [D/d]ekripsi ? ')\
           .strip().lower()
       if mode not in 'ed' or len(mode) > 1:
           raise ValueError('ERROR: Hanya karakter E, e, D, atau d yang diperbolehkan.')
       teks = input(f'> Input {"teks asli" if mode == "e" else "kode Caesar Cipher"}: ')\
           .strip().upper()
       geser = int(input('> Pergeseran enkripsi (shift): ').strip())
       # Baik enkripsi maupun dekripsi,
       # hasilnya disimpan pada variabel code
       code = enkripsi_caesar(teks, geser if mode == 'e' else -geser)
   except ValueError as err:
       error_console.print(err)
   except TypeError as err:
       error_console.print(err)
   else:
       console.print(f'[bold cyan]HASIL {"EN" if mode == "e" else "DE"}KRIPSI[/]')
       console.print(f'=> {"Teks asli" if mode == "e" else "Kode Caesar Cipher"} = [bold underline bright_white]{teks}[/]')
       console.print(f'=> {"Kode Caesar Cipher" if mode == "e" else "Teks asli"} = [bold underline gold1]{code}[/]')
_____________

Pembahasan

By default, Caesar Cipher klasik hanya menerima input berupa karakter alfabet. Jadi, kita perlu menetapkan batasan (constraint) terlebih dahulu.
Batasannya adalah fungsi enkripsi Caesar Cipher yang diimplementasikan hanya menerima input berupa karakter alfabet dan spasi.
(Batasannya tidak harus seperti itu. Saya rumuskan batasannya seperti itu karena pada soal tidak ada batasan tentang input.)

Proses enkripsipada Caesar Cipher denganshift (pergeseran) sebanyak ndilakukan denganmelakukan substitusi setiap karakter pada teks asli (teks yang akan dikodekan/disandikan) dengan karakter yang terletak pada posisi +n dari karakter asli.
Sebaliknya, pada prinsipnya proses dekripsi sama saja dengan proses enkripsi, tinggal mengganti shift (pergeseran) dengan bilangan yang berlawanan, yaitu -n.

Pada program di atas, saya menggunakan kode ASCII sebagai basis perhitungan. Kita mungkin tahu bahwa kode ASCII dari karakter "A" adalah 65. Namun, saya serahkan tugas itu pada fungsi ord("A") di Python, yang menghasilkan kode ASCII dari karakter "A".

Inti dari fungsi enkripsi_caesar(teks, geser) pada program di atas adalah:
def enkripsi_caesar(teks: str, geser = 0):
   hasil = ''
   for c in teks:
       if c != ' ':
           c = \tt {ch}r( ord('A') + ( (ord(c) - ord('A') + geser) % 26) )
       hasil += c
   return hasil

Baris kode lain ditambahkan untuk melakukan validasi terhadap teks input. Jika menemukan karakter di luar batasan yang ditetapkan, program akan menampilkan pesan kesalahan.

Contoh hasil eksekusi program dapat dilihat pada gambar yang saya sertakan.

Keterangan:

Program menerima input berupa:

  • mode operasi: enkripsi atau dekripsi
  • teks asli atau kode caesar cipher (tergantung mode yang dipilih), dan
  • shift (banyaknya pergeseran karakter).

Kode Program (Python)# caesar.py# oleh: hyfrom rich.console import Consoleconsole = Console()error_console = Console(stderr=True, style=Kode Program (Python)# caesar.py# oleh: hyfrom rich.console import Consoleconsole = Console()error_console = Console(stderr=True, style=Kode Program (Python)# caesar.py# oleh: hyfrom rich.console import Consoleconsole = Console()error_console = Console(stderr=True, style=Kode Program (Python)# caesar.py# oleh: hyfrom rich.console import Consoleconsole = Console()error_console = Console(stderr=True, style=Kode Program (Python)# caesar.py# oleh: hyfrom rich.console import Consoleconsole = Console()error_console = Console(stderr=True, style=

Semoga dengan pertanyaan yang sudah terjawab oleh henriyulianto dapat membantu memudahkan mengerjakan soal, tugas dan PR sekolah kalian.

Apabila terdapat kesalahan dalam mengerjakan soal, silahkan koreksi jawaban dengan mengirimkan email ke yomemimo.com melalui halaman Contact

Last Update: Thu, 17 Nov 22