Enkripsi Affine Cipher Menggunakan Python

Enkripsi Affine Cipher Menggunakan Python



Topik Isi:

  1. Perkenalan
  2. Pengetahuan Prasyarat
  3. Persamaan Sandi Affine
  4. Enkripsi Affine Cipher Menggunakan Python
  5. Bukti dari konsep
  6. Kesimpulan
  7. Pertanyaan yang Sering Diajukan (FAQ)

Sandi Affine mewakili jenis sandi substitusi tertentu, yang termasuk dalam kategori sandi monoalfabetik. Berbeda dengan sandi Caesar yang lebih terkenal, yang menggeser setiap huruf dalam teks biasa dengan tiga posisi tetap, sandi Affine menggunakan dua kunci (a dan b). Pemilihan kunci memang perlu pertimbangan khusus.

Pengetahuan Prasyarat

Untuk memahami secara mendalam topik hari ini, Anda harus memahami konsep-konsep berikut:







  • Pembagi Persekutuan Terbesar (PBB) & bilangan Co-prime
  • Aritmatika modular

Konsep-konsep tersebut dijelaskan secara rinci pada artikel sebelumnya yang berjudul “Pendekatan Matematika Affine Cipher”.



Persamaan Sandi Affine

Mari kita mulai dengan rumus enkripsi sandi Affine:



E(x) = (a.x + b) mod m
Mantan) Menunjukkan Enkripsi indeks alfabet x
A Nilai indeks dari kunci pertama “khusus”.
X Nilai indeks dari huruf biasa
B Nilai indeks kunci kedua (nilai shift tambahan)
mod m Operasi modulo jumlah total alfabet yaitu 26


Alt-gambar & keterangan : Persamaan Sandi Affine





Misalnya, kita ingin mengenkripsi plaintext “BIMANDO” dengan kunci 7 dan 13. Dengan menggunakan indeks tabel berikut, pertama-tama kita ubah teks biasa menjadi nomor yang sesuai:


Alt-gambar & keterangan : Penomoran Indeks



Plaintext “BIMANDO” diubah menjadi nomor pengindeksan menjadi “1 8 12 0 13 3 14”.


Alt-gambar & keterangan : Mengubah Plaintext menjadi Nilai Penomoran Indeks

Kemudian kita terapkan perhitungan persamaannya, dan hasilnya adalah sebagai berikut:


Alt-gambar & keterangan : Affine Ciphering

Jadi, plaintext “BIMANDO” dienkripsi menggunakan sandi Affine dengan kunci 7 dan 13 yang menghasilkan “URTNAIH”.

Enkripsi Affine Cipher Menggunakan Python

Sekarang, katakanlah kita ingin mengirim pesan rahasia yang berisi banyak paragraf. Melakukan enkripsi cipher Affine dengan proses manual membutuhkan banyak tenaga dan waktu, serta kemungkinan besar terjadi kesalahan perhitungan bukan? Oleh karena itu diperlukan suatu program yang mengotomatiskan proses enkripsi Affine Cipher. Berikut ini adalah proses langkah demi langkah untuk membuat program Python:

1. Impor Perpustakaan yang Diperlukan
Program kami dimulai dengan mengimpor modul yang diperlukan seperti argparse, string, dan os untuk penguraian argumen baris perintah, operasi string, dan fungsionalitas terkait sistem operasi.

impor argparse
impor rangkaian
impor Anda

2. Mendefinisikan Pemetaan Alfabet
Kemudian, kita mendefinisikan alfabet sebagai rangkaian huruf kecil bahasa Inggris. Ini digunakan untuk memetakan karakter pada saat proses enkripsi nanti.

alfabet = rangkaian . ascii_huruf kecil

3. Fungsi Enkripsi Affine Cipher
Ini adalah fungsi inti dari program kami. Dibutuhkan teks masukan dan dua kunci, “a” dan “b”, dan menerapkan enkripsi sandi Affine ke teks, menjaga struktur teks.

def affine_cipher_encryption ( teks , A , B ) :
terenkripsi_teks = ''
untuk arang di dalam teks:
jika arang. lebih rendah ( ) di dalam alfabet:
jika arang. makan malam ( ) :
terenkripsi_teks + = kr ( ( ( A * ( kata ( arang. lebih rendah ( ) ) - 97 ) + b ) % 26 ) + 65 )
kalau tidak :
terenkripsi_teks + = kr ( ( ( A * ( kata ( arang ) - 97 ) + b ) % 26 ) + 97 )
kalau tidak :

4. Pemeriksaan Utama Bersyarat
Dalam kode blok ini, periksa apakah itu dijalankan sebagai program utama. Ini menyiapkan pengurai argumen dengan deskripsi skrip dan argumennya. Argumen yang diperlukan hanyalah jalur input file teks. Jika kami tidak menentukan jalur keluaran, kami ingin jalur tersebut menetapkan default ke nama file masukan dengan “_encrypted” yang ditambahkan ke dalamnya. Untuk argumen “kunci”, kami ingin argumen tersebut diformat menjadi “a,b”. Tapi kalau kita setting, defaultnya adalah 5 dan 8.

jika __nama__ == '__utama__' :
pengurai = argparse. ArgumenParser ( keterangan = 'Enkripsi Affine Cipher dari file teks' )
pengurai . tambahkan_argumen ( 'masukan_file' , membantu = 'Jalur ke file teks masukan' )
pengurai . tambahkan_argumen ( '-k' , '--kunci' , jenis = str , bawaan = '5.8' , membantu = 'Kunci untuk Affine Cipher dalam format 'a,b'' )
argumen = pengurai . parse_args ( )

A , B = peta ( ke dalam , argumen. kunci . membelah ( ',' ) )

dengan membuka ( argumen. masukan_file , 'R' ) sebagai mengajukan :
teks = mengajukan . membaca ( )

# Ekstrak nama file dari jalur file input
masukan_nama file , perpanjangan = Anda . jalur . teks terpisah ( argumen. masukan_file )
default_output_file = masukan_nama file + '_terenkripsi' + ekstensi

# Enkripsi teks menggunakan affine cipher
terenkripsi_teks = affine_cipher_encryption ( teks , A , B )

# Tulis teks terenkripsi ke file baru
dengan membuka ( default_output_file , 'Di dalam' ) sebagai mengajukan :
mengajukan . menulis ( terenkripsi_teks )

Terakhir, setelah fungsi enkripsi selesai, program kami akan menyimpan keluaran dengan ekstensi file yang sama dengan file masukan.

Sekarang, simpan ke “affine_cipher.py”. Sekarang jalankan programnya dengan mengetikkan perintah berikut:

python affine_cipher. py -H

Jika tidak menemukan error maka outputnya akan terlihat seperti gambar berikut:


Alt-gambar & keterangan : Program Affine Cipher Python

Bukti dari konsep

Kami memiliki pesan rahasia dengan nama “message.txt” berikut, dan kami ingin menyiarkannya ke anggota kami:


Alt-gambar & keterangan : Teks biasa

Jadi, kami menggunakan program yang kami buat sebelumnya untuk mengenkripsi pesan ini menggunakan Affine cipher dengan kunci 3 dan 7. Perintahnya adalah sebagai berikut:

python affine_cipher. py pesan. txt -k 3 , 7


Alt-gambar & keterangan : Program Affine Cipher Python

Dengan kecepatan sekejap mata, pesan terenkripsi berhasil dibuat dan disimpan ke “message_encrypted.txt”. Mari kita periksa seperti apa pesannya:


Alt-gambar & keterangan : Membatasi Ciphertext

Seperti yang Anda lihat, pesannya diacak. Hanya anggota kami yang mengetahui metode sandi dan kuncinya yang dapat mendekripsi pesan tersebut.

Cobalah sendiri

Unduh kode sumber program ini di halaman GitHub kami di https://github.com/bimando/Affine-Cipher .

Kesimpulan

Kesimpulannya, metode enkripsi sandi Affine, suatu bentuk sandi substitusi monoalfabetik, menawarkan peningkatan keamanan melalui penggunaan dua kunci, memerlukan pertimbangan yang cermat selama pemilihan kunci. Memahami konsep-konsep seperti Pembagi Persekutuan Terbesar (GCD), bilangan prima bersama, dan aritmatika modular sangat penting untuk memahami seluk-beluk sandi Affine.

Persamaan sandi Affine, E(x) = (a.x + b) mod m, berfungsi sebagai alat dasar untuk enkripsi di mana “a” dan “b” mewakili kunci dan “x” melambangkan indeks huruf teks biasa. Penerapan program Python otomatis untuk proses enkripsi sandi Affine ditunjukkan untuk menyederhanakan tugas enkripsi skala besar secara efisien. Program ini menggabungkan fungsionalitas utama termasuk impor perpustakaan, pemetaan alfabet, fungsi enkripsi, dan penguraian argumen baris perintah untuk jalur masukan dan keluaran. Khususnya, skrip ini mengaktifkan pengaturan default untuk kunci dan nama file keluaran untuk memfasilitasi proses enkripsi yang lancar.

Pertanyaan yang Sering Diajukan (FAQ)

Q1: Apa itu sandi Affine dan apa bedanya dengan sandi Caesar?

A1: Sandi Affine adalah jenis sandi substitusi monoalfabetik yang menggunakan dua kunci, “a” dan “b”, untuk enkripsi. Sebaliknya, sandi Caesar menggunakan pergeseran tetap sebanyak tiga posisi untuk setiap huruf dalam teks biasa.

Q2. Apa prasyarat untuk memahami sandi Affine?

A2: Untuk memahami sandi Affine secara menyeluruh, penting untuk memahami konsep-konsep seperti Pembagi Persekutuan Terbesar (GCD), bilangan koprima, dan aritmatika modular.

Q3: Bagaimana cara mengenkripsi pesan menggunakan sandi Affine dengan Python?

A3: Untuk mengotomatiskan proses enkripsi sandi Affine, Anda dapat menggunakan program Python yang diuraikan dalam artikel. Program ini secara efisien mengenkripsi input teks berskala besar, menyederhanakan prosedur enkripsi. Artikel ini memberikan petunjuk langkah demi langkah tentang mengimpor perpustakaan, menentukan pemetaan alfabet, membuat fungsi enkripsi, dan menguraikan argumen baris perintah untuk jalur input dan output.