Tema sadržaja:
- Uvod
- Preduvjet znanja
- Jednadžba afine šifre
- Enkripcija afinom šifrom pomoću Pythona
- Dokaz koncepta
- Zaključak
- Č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 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.
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.
š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.
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 -hAko 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.