Šifriranje afine šifre z uporabo Pythona

Sifriranje Afine Sifre Z Uporabo Pythona



Tema vsebine:

  1. Uvod
  2. Predpogojno znanje
  3. Enačba afine šifre
  4. Šifriranje afine šifre z uporabo Pythona
  5. Dokaz koncepta
  6. Zaključek
  7. Pogosto zastavljena vprašanja (FAQ)

Afina šifra predstavlja posebno vrsto substitucijske šifre, ki spada v kategorijo enoabecednih šifer. Za razliko od bolj znane Caesarjeve šifre, ki premakne vsako črko v odprtem besedilu za določeno število treh položajev, šifra Affine uporablja dva ključa (a in b). Izbira ključev zahteva posebno pozornost.

Predpogojno znanje

Če želite poglobljeno razumeti današnjo temo, morate razumeti naslednje pojme:







  • Največji skupni delitelj (GCD) in sopraštevilo
  • Modularna aritmetika

Ti koncepti so podrobno razloženi v prejšnjem članku z naslovom 'Matematični pristop afine šifre'.



Enačba afine šifre

Začnimo s formulo za šifriranje Afine šifre:



E(x) = (a.x + b) mod m
nekdanji) Označuje šifriranje abecednega indeksa x
a Vrednost indeksa 'posebnega' prvega ključa
x Vrednost indeksa navadne črke
b Vrednost indeksa drugega ključa (dodatna vrednost premika)
mod m Modulo operacije celotnega števila abecede, ki je 26


Nadomestna slika in napis : Enačba afine šifre





Na primer, želimo šifrirati golo besedilo 'BIMANDO' s ključema 7 in 13. Z naslednjim indeksom tabele najprej pretvorimo golo besedilo v ustrezno številko:


Nadomestna slika in napis : Številčenje kazala



Govo besedilo »BIMANDO« se pretvori v indeksno številko v »1 8 12 0 13 3 14«.


Nadomestna slika in napis : Pretvori navadno besedilo v indeksno oštevilčeno vrednost

Nato uporabimo izračun enačbe in rezultat je prikazan na naslednji način:


Nadomestna slika in napis : Afino šifriranje

Torej je golo besedilo »BIMANDO« šifrirano z uporabo afine šifre s ključema 7 in 13, kar ima za posledico »URTNAIH«.

Šifriranje afine šifre z uporabo Pythona

Zdaj pa recimo, da želimo poslati zaupno sporočilo, ki vsebuje kup odstavkov. Izvajanje šifriranja afinne šifre z ročnim postopkom zahteva veliko truda in časa ter ima veliko možnost zgrešenega izračuna, kajne? Zato potrebujemo program, ki avtomatizira postopek šifriranja Affine Cipher. Sledi postopek po korakih za ustvarjanje programa Python:

1. Uvozite zahtevane knjižnice
Naš program se začne z uvozom potrebnih modulov, kot so argparse, string in os za razčlenjevanje argumentov ukazne vrstice, operacije nizov in funkcionalnosti, povezane z operacijskim sistemom.

uvoz argparse
uvoz vrvica
uvoz ti

2. Definiranje abecednega preslikave
Nato definiramo abecedo kot niz malih angleških črk. To se uporablja za poznejše preslikavo znakov med postopkom šifriranja.

abeceda = vrvica . ascii_male črke

3. Funkcija šifriranja afine šifre
To je glavna funkcija našega programa. Vzame vneseno besedilo in dva ključa, »a« in »b«, ter za besedilo uporabi šifriranje Affine šifre, pri čemer ohrani strukturo besedila.

def affine_cipher_encryption ( besedilo , a , b ) :
šifrirano_besedilo = ''
za char v besedilo:
če char. nižje ( ) v abeceda:
če char. je zgornji ( ) :
šifrirano_besedilo + = hr ( ( ( a * ( beseda ( char. nižje ( ) ) - 97 ) + b ) % 26 ) + 65 )
drugače :
šifrirano_besedilo + = hr ( ( ( a * ( beseda ( char ) - 97 ) + b ) % 26 ) + 97 )
drugače :

4. Pogojno glavno preverjanje
V tej kodi bloka preverite, ali se izvaja kot glavni program. Nastavi razčlenjevalnik argumentov z opisi za skript in njegove argumente. Zahtevani argument je le pot vnosa besedilne datoteke. Ko ne podamo izhodne poti, želimo, da nastavi privzeto ime vhodne datoteke z dodatkom »_encrypted«. Za argument »ključi« želimo, da je oblikovan v »a,b«. Če pa ga nastavimo, je privzeto 5 in 8.

če __ime__ == '__glavni__' :
razčlenjevalnik = argparse. ArgumentParser ( opis = 'Afinno šifrirano šifriranje iz besedilne datoteke' )
razčlenjevalnik . dodatek_argument ( 'vhodna_datoteka' , pomoč = 'Pot do vhodne besedilne datoteke' )
razčlenjevalnik . dodatek_argument ( '-k' , '--ključi' , vrsta = str , privzeto = '5,8' , pomoč = 'Ključi za afino šifro v formatu 'a,b'' )
args = razčlenjevalnik . parse_args ( )

a , b = zemljevid ( int , args. ključi . razdeliti ( ',' ) )

z odprto ( args. vhodna_datoteka , 'r' ) kot mapa :
besedilo = mapa . prebrati ( )

# Izvlecite ime datoteke iz vhodne poti datoteke
ime_vhodne_datoteke , razširitev = ti . pot . razdeljeno besedilo ( args. vhodna_datoteka )
privzeta_izhodna_datoteka = vhodno_ime_datoteke + '_šifrirano' + podaljšek

# Šifrirajte besedilo z uporabo afine šifre
šifrirano_besedilo = affine_cipher_encryption ( besedilo , a , b )

# Zapišite šifrirano besedilo v novo datoteko
z odprto ( privzeta_izhodna_datoteka , 'v' ) kot mapa :
mapa . pisati ( šifrirano_besedilo )

Končno, ko je funkcija šifriranja končana, bo naš program shranil izhod z isto pripono datoteke kot vhodna datoteka.

Zdaj ga shranite v »affine_cipher.py«. Zdaj zaženite program tako, da vnesete naslednji ukaz:

python affine_cipher. py -h

Če ne najdete nobene napake, je rezultat videti kot naslednja slika:


Nadomestna slika in napis : Program za afinno šifriranje Python

Dokaz koncepta

Imamo zaupno sporočilo z naslednjim imenom »message.txt« in ga želimo posredovati našim članom:


Nadomestna slika in napis : Golo besedilo

Uporabimo torej program, ki smo ga ustvarili, preden želimo šifrirati to sporočilo z uporabo afine šifre s ključema 3 in 7. Ukaz je naslednji:

python affine_cipher. py sporočilo. txt -k 3 , 7


Nadomestna slika in napis : Program za Python affine Cipher

Šifrirano sporočilo je uspešno ustvarjeno in shranjeno v »message_encrypted.txt« s hitrostjo mežika. Poglejmo, kako izgleda sporočilo:


Nadomestna slika in napis : afino šifrirano besedilo

Kot lahko vidite, je sporočilo kodirano. Samo naši člani, ki poznajo metodo šifriranja in njene ključe, lahko dešifrirajo sporočilo.

Preizkusite sami

Prenesite to izvorno kodo programa na naši strani GitHub na https://github.com/bimando/Affine-Cipher .

Zaključek

Skratka, metoda šifriranja Afine šifre, oblika enoabecedne nadomestne šifre, ponuja večjo varnost z uporabo dveh ključev, kar zahteva skrbno premislek med izbiro ključa. Razumevanje konceptov, kot so največji skupni delitelj (GCD), sopraštevila in modularna aritmetika, je bistveno za razumevanje zapletenosti afine šifre.

Enačba afine šifre, E(x) = (a.x + b) mod m, služi kot temeljno orodje za šifriranje, kjer 'a' in 'b' predstavljata ključa, 'x' pa simbolizira črkovni indeks odprtega besedila. Izvedba avtomatiziranega programa Python za šifrirni proces Affine Cipher je pokazala, da učinkovito racionalizira obsežne naloge šifriranja. Program vključuje ključne funkcije, vključno z uvozom knjižnic, preslikavo abecede, funkcijo šifriranja in razčlenjevanjem argumentov ukazne vrstice za vhodne in izhodne poti. Predvsem skript omogoča privzete nastavitve za ključe in imena izhodnih datotek, da olajša brezhiben postopek šifriranja.

Pogosto zastavljena vprašanja (FAQ)

V1: Kaj je Affine šifra in kako se razlikuje od Cezarjeve šifre?

A1: Afina šifra je vrsta enoabecedne nadomestne šifre, ki za šifriranje uporablja dva ključa, 'a' in 'b'. Nasprotno pa Cezarjeva šifra uporablja fiksni premik treh položajev za vsako črko v odprtem besedilu.

Q2. Kateri so predpogoji za razumevanje afinske šifre?

A2: Za temeljito razumevanje afine šifre je ključnega pomena razumevanje konceptov, kot so največji skupni delitelj (GCD), sopraštevila in modularna aritmetika.

V3: Kako lahko šifriram sporočilo z uporabo šifre Affine v Pythonu?

A3: Za avtomatizacijo postopka šifriranja šifre Affine lahko uporabite program Python, ki je opisan v članku. Program učinkovito šifrira obsežne vnose besedila, kar poenostavlja postopek šifriranja. Članek vsebuje navodila po korakih za uvoz knjižnic, definiranje preslikave abecede, ustvarjanje šifrirne funkcije in razčlenjevanje argumentov ukazne vrstice za vhodne in izhodne poti.