Enkripcija afinom šifrom pomoću Pythona

Enkripcija Afinom Sifrom Pomocu Pythona



Tema sadržaja:

  1. Uvod
  2. Preduvjet znanja
  3. Jednadžba afine šifre
  4. Enkripcija afinom šifrom pomoću Pythona
  5. Dokaz koncepta
  6. Zaključak
  7. Često postavljana pitanja (FAQ)

Afina šifra predstavlja specifičnu vrstu supstitucijske šifre, koja spada u kategoriju monoalfabetskih šifri. Za razliku od poznatije Caesar šifre, koja pomiče svako slovo u otvorenom tekstu za fiksna tri mjesta, Afina šifra koristi dva ključa (a i b). Odabir ključeva treba posebno razmotriti.

Preduvjet znanja

Kako biste dublje razumjeli današnju temu, morate razumjeti sljedeće pojmove:







  • Najveći zajednički djelitelj (GCD) i suprosti brojevi
  • Modularna aritmetika

Ti koncepti su detaljno objašnjeni u prethodnom članku pod naslovom “Matematički pristup afine šifre”.



Jednadžba afine šifre

Počnimo s formulom za enkripciju affine šifre:



E(x) = (a.x + b) mod m
Prijašnji) Označava šifriranje x abecednog indeksa
a Vrijednost indeksa 'posebnog' prvog ključa
x Vrijednost indeksa običnog slova
b Vrijednost indeksa drugog ključa (dodatna vrijednost pomaka)
mod m Modulo operacije ukupnog broja abecede koja iznosi 26


Alt-slika i naslov : Jednadžba afine šifre





Na primjer, želimo šifrirati 'BIMANDO' otvoreni tekst s ključevima 7 i 13. Koristeći sljedeći indeks tablice, prvo pretvaramo otvoreni tekst u odgovarajući broj:


Alt-slika i naslov : Numeriranje indeksa



Otvoreni tekst “BIMANDO” pretvara se u indeksni broj u “1 8 12 0 13 3 14”.


Alt-slika i naslov : Pretvorite otvoreni tekst u vrijednost numeriranja indeksa

Zatim primjenjujemo izračun jednadžbe, a rezultat je prikazan na sljedeći način:


Alt-slika i naslov : Afino šifriranje

Dakle, 'BIMANDO' otvoreni tekst je šifriran pomoću afine šifre s ključevima 7 i 13 što rezultira 'URTNAIH'.

Šifriranje afinom šifrom pomoću Pythona

Sada, recimo da želimo poslati povjerljivu poruku koja sadrži hrpu odlomaka. Izvođenje enkripcije affine šifre ručnim postupkom oduzima puno truda i vremena i ima velike šanse za promašaj izračuna, zar ne? Stoga nam je potreban program koji automatizira proces enkripcije Affine Cipher. Slijedi postupak korak po korak za izradu Python programa:

1. Uvezite potrebne biblioteke
Naš program počinje uvozom potrebnih modula kao što su argparse, string i os za parsiranje argumenata naredbenog retka, operacije nizova i funkcionalnosti povezane s operativnim sustavom.

uvoz argparse
uvoz niz
uvoz vas

2. Definiranje preslikavanja abecede
Zatim definiramo abecedu kao niz malih slova engleskog jezika. Ovo se koristi za kasnije mapiranje znakova tijekom procesa enkripcije.

abeceda = niz . ascii_mala slova

3. Funkcija šifriranja afinom šifrom
Ovo je temeljna funkcija našeg programa. Uzima ulazni tekst i dva ključa, 'a' i 'b', i primjenjuje enkripciju Affine šifre na tekst, čuvajući strukturu teksta.

def afinna_šifrirana_enkripcija ( tekst , a , b ) :
šifrirani_tekst = ''
za char u tekst:
ako char. niži ( ) u abeceda:
ako char. je gornji ( ) :
šifrirani_tekst + = hr ( ( ( a * ( riječ ( char. niži ( ) ) - 97 ) + b ) % 26 ) + 65 )
drugo :
šifrirani_tekst + = hr ( ( ( a * ( riječ ( char ) - 97 ) + b ) % 26 ) + 97 )
drugo :

4. Uvjetna glavna provjera
U ovom blok kodu provjerite izvršava li se kao glavni program. Postavlja parser argumenata s opisima za skriptu i njene argumente. Traženi argument samo je putanja unosa tekstualne datoteke. Kada ne navedemo izlazni put, želimo da postavi zadani naziv ulazne datoteke s dodatkom '_encrypted'. Za argument 'ključevi', želimo da bude formatiran u 'a,b'. Ali ako ga postavimo, zadano je 5 i 8.

ako __Ime__ == '__glavni__' :
parser = argparse. ArgumentParser ( opis = 'Affine Cipher Enkripcija iz tekstualne datoteke' )
parser . dodaj_argument ( 'ulazna_datoteka' , Pomozite = 'Put do ulazne tekstualne datoteke' )
parser . dodaj_argument ( '-k' , '--ključevi' , tip = str , zadano = '5,8' , Pomozite = 'Ključevi za afinu šifru u formatu 'a,b'' )
args = parser . parse_args ( )

a , b = karta ( int , args. ključevi . podjela ( ',' ) )

s otvoren ( args. ulazna_datoteka , 'r' ) kao datoteka :
tekst = datoteka . čitati ( )

# Izdvojite naziv datoteke iz putanje ulazne datoteke
input_filename , proširenje = vas . staza . podijeljeni tekst ( args. ulazna_datoteka )
zadana_izlazna_datoteka = input_filename + '_šifrirano' + proširenje

# Šifrirajte tekst pomoću afine šifre
šifrirani_tekst = afinna_šifrirana_enkripcija ( tekst , a , b )

# Zapišite šifrirani tekst u novu datoteku
s otvoren ( zadana_izlazna_datoteka , 'U' ) kao datoteka :
datoteka . pisati ( šifrirani_tekst )

Konačno, nakon što je funkcija enkripcije gotova, naš program će spremiti izlaz s istom ekstenzijom datoteke kao i ulazna datoteka.

Sada ga spremite u “affine_cipher.py”. Sada pokrenite program upisivanjem sljedeće naredbe:

python affine_cipher. py -h

Ako ne pronađete grešku, rezultat izgleda kao sljedeća slika:


Alt-slika i naslov : Python program affine Cipher

Dokaz koncepta

Imamo povjerljivu poruku sa sljedećim nazivom 'message.txt' i želimo je emitirati našim članovima:


Alt-slika i naslov : otvoreni tekst

Dakle, koristimo program koji smo izradili prije nego što želimo kriptirati ovu poruku pomoću Afine šifre s ključevima 3 i 7. Naredba je sljedeća:

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


Alt-slika i naslov : Python program affine Cipher

Brzinom treptaja oka, šifrirana poruka je uspješno kreirana i spremljena u “message_encrypted.txt”. Provjerimo kako poruka izgleda:


Alt-slika i naslov : Afini šifrirani tekst

Kao što vidite, poruka je kodirana. Samo naši članovi koji poznaju metodu šifriranja i njezine ključeve mogu dešifrirati poruku.

Probajte sami

Preuzmite ovaj izvorni kod programa na našoj GitHub stranici na https://github.com/bimando/Affine-Cipher .

Zaključak

Zaključno, metoda enkripcije Affine šifre, oblik monoalfabetske supstitucijske šifre, nudi poboljšanu sigurnost korištenjem dvaju ključeva, što zahtijeva pažljivo razmatranje tijekom odabira ključa. Razumijevanje koncepata kao što su najveći zajednički djelitelj (GCD), istoprosti brojevi i modularna aritmetika ključni su za razumijevanje zamršenosti afine šifre.

Jednadžba afine šifre, E(x) = (a.x + b) mod m, služi kao temeljni alat za šifriranje gdje 'a' i 'b' predstavljaju ključeve, a 'x' simbolizira indeks slova otvorenog teksta. Pokazalo se da implementacija automatiziranog Python programa za proces enkripcije Affine šifre učinkovito pojednostavljuje zadatke šifriranja velikih razmjera. Program uključuje ključne funkcije uključujući uvoz biblioteka, mapiranje abecede, funkciju šifriranja i analizu argumenata naredbenog retka za ulazne i izlazne staze. Naime, skripta omogućuje zadane postavke za ključeve i nazive izlaznih datoteka kako bi se olakšao besprijekoran proces šifriranja.

Često postavljana pitanja (FAQ)

P1: Što je Afina šifra i po čemu se razlikuje od Cezarove šifre?

A1: Afina šifra je vrsta monoalfabetske supstitucijske šifre koja koristi dva ključa, 'a' i 'b', za šifriranje. Nasuprot tome, Cezarova šifra koristi fiksni pomak od tri pozicije za svako slovo u otvorenom tekstu.

Q2. Koji su preduvjeti za razumijevanje Affine šifre?

A2: Da biste temeljito razumjeli afinu šifru, ključno je razumjeti koncepte kao što su najveći zajednički djelitelj (GCD), istoprosti brojevi i modularna aritmetika.

P3: Kako mogu šifrirati poruku pomoću šifre Affine u Pythonu?

O3: Kako biste automatizirali proces enkripcije Affine šifre, možete upotrijebiti program Python koji je opisan u članku. Program učinkovito šifrira velike unose teksta, pojednostavljujući postupak šifriranja. Članak pruža upute korak po korak o uvozu biblioteka, definiranju mapiranja abecede, stvaranju funkcije šifriranja i raščlanjivanju argumenata naredbenog retka za ulazne i izlazne staze.