Penyulitan Sifir Affine Menggunakan Python

Penyulitan Sifir Affine Menggunakan Python



Topik Kandungan:

  1. pengenalan
  2. Pengetahuan Prasyarat
  3. Persamaan Sifir Affine
  4. Penyulitan Sifir Affine Menggunakan Python
  5. Bukti konsep
  6. Kesimpulan
  7. Soalan Lazim (Soalan Lazim)

Sifir Affine mewakili jenis sifir penggantian tertentu, termasuk dalam kategori sifir monoalfabetik. Tidak seperti sifir Caesar yang lebih terkenal, yang mengalihkan setiap huruf dalam teks biasa dengan tiga bilangan kedudukan tetap, sifir Affin menggunakan dua kekunci (a dan b). Memilih kunci harus memerlukan pertimbangan khusus.

Pengetahuan Prasyarat

Untuk memahami secara mendalam tentang topik hari ini, anda perlu memahami konsep berikut:







  • Nombor Pembahagi Sepunya Terhebat (GCD) & Co-prima
  • Aritmetik modular

Konsep-konsep tersebut diterangkan secara terperinci dalam artikel sebelum ini bertajuk 'Pendekatan Matematik Affine Cipher'.



Persamaan Sifir Affine

Mari kita mulakan dengan formula untuk penyulitan sifir Affine:



E(x) = (a.x + b) mod m
bekas) Menandakan Penyulitan indeks abjad x
a Nilai indeks kunci pertama 'istimewa'.
x Nilai indeks huruf biasa
b Nilai indeks kunci kedua (nilai anjakan tambahan)
mod m Operasi modulo daripada jumlah keseluruhan abjad iaitu 26


Alt-imej & kapsyen : Persamaan Sifir Afine





Sebagai contoh, kami ingin menyulitkan teks biasa 'BIMANDO' dengan kekunci 7 dan 13. Menggunakan indeks jadual berikut, kami mula-mula menukar teks biasa kepada nombor yang sepadan:


Alt-imej & kapsyen : Penomboran Indeks



Teks biasa “BIMANDO” ditukar kepada nombor pengindeksan kepada “1 8 12 0 13 3 14”.


Alt-imej & kapsyen : Menukar Teks Biasa kepada Nilai Penomboran Indeks

Kemudian, kami menggunakan pengiraan persamaan, dan hasilnya ditunjukkan seperti berikut:


Alt-imej & kapsyen : Afine Ciphering

Jadi, teks biasa 'BIMANDO' disulitkan menggunakan sifir Affine dengan kekunci 7 dan 13 yang menghasilkan 'URTNAIH'.

Penyulitan Sifir Affine Menggunakan Python

Sekarang, katakan kita mahu menghantar mesej sulit yang mengandungi sekumpulan perenggan. Melakukan penyulitan sifir Affine dengan proses manual memerlukan banyak usaha dan masa, dan mempunyai peluang tinggi untuk kehilangan pengiraan, bukan? Oleh itu, kami memerlukan program yang mengautomasikan proses penyulitan Affine Cipher. Berikut ialah proses langkah demi langkah untuk mencipta program Python:

1. Import Perpustakaan yang Diperlukan
Program kami bermula dengan mengimport modul yang diperlukan seperti argparse, rentetan dan os untuk penghuraian hujah baris perintah, operasi rentetan dan fungsi berkaitan sistem pengendalian, masing-masing.

import argparse
import tali
import awak

2. Mentakrifkan Pemetaan Abjad
Kemudian, kami mentakrifkan abjad sebagai rentetan huruf kecil Inggeris. Ini digunakan untuk memetakan aksara semasa proses penyulitan nanti.

abjad = tali . ascii_huruf kecil

3. Fungsi Penyulitan Sifir Affine
Ini adalah fungsi teras program kami. Ia mengambil teks input dan dua kekunci, 'a' dan 'b', dan menggunakan penyulitan sifir Affine pada teks, mengekalkan struktur teks.

def affine_cipher_encryption ( teks , a , b ) :
encrypted_text = ''
untuk char dalam teks:
jika char. lebih rendah ( ) dalam abjad:
jika char. isupper ( ) :
encrypted_text + = chr ( ( ( a * ( perkataan ( char. lebih rendah ( ) ) - 97 ) + b ) % 26 ) + 65 )
lain :
encrypted_text + = chr ( ( ( a * ( perkataan ( char ) - 97 ) + b ) % 26 ) + 97 )
lain :

4. Pemeriksaan Utama Bersyarat
Dalam kod blok ini, semak sama ada ia sedang dilaksanakan sebagai program utama. Ia menyediakan penghurai hujah dengan penerangan untuk skrip dan hujahnya. Argumen yang diperlukan hanyalah laluan input fail teks. Apabila kami tidak menentukan laluan output, kami mahu ia menetapkan lalai kepada nama fail input dengan '_encrypted' dilampirkan padanya. Untuk hujah 'kunci', kami mahu ia diformatkan kepada 'a,b'. Tetapi jika kita menetapkannya, lalai ialah 5 dan 8.

jika __nama__ == '__utama__' :
penghurai = argparse. ArgumentParser ( penerangan = 'Penyulitan Sifir Affine daripada fail teks' )
penghurai . tambah_argumen ( 'fail_masukan' , membantu = 'Laluan ke fail teks input' )
penghurai . tambah_argumen ( '-k' , '--kunci' , taip = str , lalai = '5.8' , membantu = 'Kunci untuk Sifir Affine dalam format 'a,b'' )
args = penghurai . parse_args ( )

a , b = peta ( int , args. kunci . berpecah ( ',' ) )

dengan buka ( args. input_file , 'r' ) sebagai fail :
teks = fail . membaca ( )

# Ekstrak nama fail daripada laluan fail input
input_nama fail , sambungan = awak . laluan . splitext ( args. input_file )
default_output_file = input_filename + '_disulitkan' + sambungan

# Sulitkan teks menggunakan sifir affine
encrypted_text = affine_cipher_encryption ( teks , a , b )

# Tulis teks yang disulitkan ke fail baharu
dengan buka ( default_output_file , 'dalam' ) sebagai fail :
fail . menulis ( encrypted_text )

Akhir sekali, sebaik sahaja fungsi penyulitan selesai, program kami akan menyimpan output dengan sambungan fail yang sama seperti fail input.

Sekarang, simpannya ke 'affine_cipher.py'. Sekarang, jalankan program dengan menaip arahan berikut:

python affine_cipher. py -h

Jika anda tidak mendapati ralat, output kelihatan seperti imej berikut:


Alt-imej & kapsyen : Program Affine Cipher Python

Bukti konsep

Kami mempunyai mesej sulit dengan nama 'message.txt' berikut dan kami ingin menyiarkannya kepada ahli kami:


Alt-imej & kapsyen : Teks kosong

Jadi, kami menggunakan program yang kami buat sebelum kami ingin menyulitkan mesej ini menggunakan sifir Affine dengan kekunci 3 dan 7. Perintahnya adalah seperti berikut:

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


Alt-imej & kapsyen : Program Affine Cipher Python

Dengan kelajuan sekelip mata, mesej yang disulitkan berjaya dibuat dan disimpan ke 'message_encrypted.txt'. Mari semak rupa mesej itu:


Alt-imej & kapsyen : Afine Ciphertext

Seperti yang anda lihat, mesej itu bergegas. Hanya ahli kami yang mengetahui kaedah sifir dan kuncinya dapat menyahsulit mesej.

Cubalah Sendiri

Muat turun kod sumber program ini pada halaman GitHub kami di https://github.com/bimando/Affine-Cipher .

Kesimpulan

Kesimpulannya, kaedah penyulitan sifir Affine, satu bentuk sifir penggantian monoalfabetik, menawarkan keselamatan yang dipertingkatkan melalui penggunaan dua kekunci, menuntut pertimbangan yang teliti semasa pemilihan kunci. Memahami konsep seperti Pembahagi Sepunya Terhebat (GCD), nombor perdana bersama dan aritmetik modular adalah penting untuk memahami selok-belok sifir Affine.

Persamaan sifir Affine, E(x) = (a.x + b) mod m, berfungsi sebagai alat asas untuk penyulitan dengan 'a' dan 'b' mewakili kekunci dan 'x' melambangkan indeks huruf plaintext. Pelaksanaan program Python automatik untuk proses penyulitan sifir Affine telah ditunjukkan untuk menyelaraskan tugas penyulitan berskala besar dengan cekap. Program ini menggabungkan fungsi utama termasuk pengimportan perpustakaan, pemetaan abjad, fungsi penyulitan, dan penghuraian hujah baris arahan untuk laluan input dan output. Terutama, skrip membolehkan tetapan lalai untuk kunci dan nama fail output untuk memudahkan proses penyulitan yang lancar.

Soalan Lazim (Soalan Lazim)

S1: Apakah sifir Affine dan bagaimana ia berbeza daripada sifir Caesar?

A1: Sifir Affine ialah sejenis sifir penggantian monoalfabetik yang menggunakan dua kekunci, 'a' dan 'b', untuk penyulitan. Sebaliknya, sifir Caesar menggunakan anjakan tetap tiga kedudukan untuk setiap huruf dalam plaintext.

S2. Apakah prasyarat untuk memahami sifir Affine?

A2: Untuk memahami sifir Affine dengan teliti, adalah penting untuk memahami konsep seperti Pembahagi Sepunya Terhebat (GCD), nombor perdana bersama dan aritmetik modular.

S3: Bagaimanakah saya boleh menyulitkan mesej menggunakan sifir Affine dalam Python?

J3: Untuk mengautomasikan proses penyulitan sifir Affine, anda boleh menggunakan program Python yang digariskan dalam artikel. Program ini menyulitkan input teks berskala besar dengan cekap, memudahkan prosedur penyulitan. Artikel itu menyediakan arahan langkah demi langkah untuk mengimport perpustakaan, mentakrifkan pemetaan abjad, mencipta fungsi penyulitan dan menghuraikan argumen baris arahan untuk laluan input dan output.