Afininis šifravimas naudojant Python

Afininis Sifravimas Naudojant Python



Turinio tema:

  1. Įvadas
  2. Būtinos žinios
  3. Afininio šifravimo lygtis
  4. Afininis šifravimas naudojant Python
  5. Koncepcijos įrodymas
  6. Išvada
  7. Dažnai užduodami klausimai (DUK)

Afininis šifras reiškia tam tikrą pakeitimo šifro rūšį, patenkančią į monoalfabetinių šifrų kategoriją. Skirtingai nuo garsesnio Cezario šifro, kuris pakeičia kiekvieną paprastojo teksto raidę fiksuotu trijų padėčių skaičiumi, afinų šifras naudoja du raktus (a ir b). Renkantis raktus reikia ypatingo dėmesio.

Būtinos žinios

Norėdami giliai suprasti šiandienos temą, turite suprasti šias sąvokas:







  • Didžiausias bendras daliklis (GCD) ir bendras pirminis skaičius
  • Modulinė aritmetika

Šios sąvokos išsamiai paaiškintos ankstesniame straipsnyje „Afininio šifro matematinis metodas“.



Afininio šifravimo lygtis

Pradėkime nuo Affine šifro šifravimo formulės:



E(x) = (a.x + b) mod m
Buvęs) Žymi x abėcėlinės rodyklės šifravimą
a „Specialiojo“ pirmojo rakto indekso reikšmė
x Paprastos raidės indekso reikšmė
b Antrojo klavišo indekso reikšmė (papildoma poslinkio reikšmė)
mod m Modulinės operacijos su bendra abėcėlės suma, kuri yra 26


Alternatyvus vaizdas ir antraštė : giminingo šifro lygtis





Pavyzdžiui, norime užšifruoti „BIMANDO“ paprastą tekstą su 7 ir 13 raktais. Naudodami šią lentelės indeksą, pirmiausia paverčiame paprastą tekstą į atitinkamą skaičių:


Alternatyvus vaizdas ir antraštė : Rodyklės numeracija



„BIMANDO“ paprastas tekstas paverčiamas indeksavimo numeriu „1 8 12 0 13 3 14“.


Alternatyvus vaizdas ir antraštė : paverskite paprastą tekstą į indekso numeravimo reikšmę

Tada taikome lygties skaičiavimą, o rezultatas rodomas taip:


Alternatyvus vaizdas ir antraštė : Afininis šifravimas

Taigi, „BIMANDO“ paprastas tekstas yra užšifruotas naudojant Affine šifrą su raktais 7 ir 13, todėl gaunamas „URTNAIH“.

Afininis šifravimas naudojant Python

Tarkime, kad norime išsiųsti konfidencialų pranešimą, kuriame yra daug pastraipų. Affine šifravimas naudojant rankinį procesą reikalauja daug pastangų ir laiko, be to, yra didelė tikimybė, kad nepavyks apskaičiuoti, tiesa? Todėl mums reikia programos, kuri automatizuotų Affine Cipher šifravimo procesą. Toliau pateikiamas žingsnis po žingsnio Python programos kūrimo procesas:

1. Importuokite reikalingas bibliotekas
Mūsų programa pradedama importuojant reikalingus modulius, tokius kaip argparse, string ir os, kad būtų galima atitinkamai analizuoti komandų eilutės argumentus, eilučių operacijas ir su operacine sistema susijusias funkcijas.

importuoti argparse
importuoti styga
importuoti tu

2. Abėcėlės atvaizdavimo apibrėžimas
Tada abėcėlę apibrėžiame kaip mažųjų angliškų raidžių eilutę. Tai vėliau naudojama simbolių atvaizdavimui šifravimo proceso metu.

abėcėlė = styga . ascii_mažosios raidės

3. Afininio šifro šifravimo funkcija
Tai yra pagrindinė mūsų programos funkcija. Jis paima įvesties tekstą ir du raktus „a“ ir „b“ ir tekstui taiko Affine šifro šifravimą, išsaugant teksto struktūrą.

def affine_cipher_encryption ( tekstą , a , b ) :
šifruotas_tekstas = ''
dėl char in tekstas:
jeigu char. žemesnė ( ) in abėcėlė:
jeigu char. isupper ( ) :
šifruotas_tekstas + = chr ( ( ( * ( žodį ( char. žemesnė ( ) ) - 97 ) + b ) % 26 ) + 65 )
Kitas :
šifruotas_tekstas + = chr ( ( ( * ( žodį ( char ) - 97 ) + b ) % 26 ) + 97 )
Kitas :

4. Sąlyginis pagrindinis patikrinimas
Šiame bloko kode patikrinkite, ar jis vykdomas kaip pagrindinė programa. Jis nustato argumentų analizatorių su scenarijaus ir jo argumentų aprašymais. Reikalingas argumentas yra tik tekstinio failo įvesties kelias. Kai nenurodome išvesties kelio, norime, kad jis nustatytų numatytąjį įvesties failo pavadinimą, prie kurio pridėtas „_encrypted“. Argumentui „raktai“ norime, kad jis būtų suformatuotas „a,b“. Bet jei mes jį nustatome, numatytoji reikšmė yra 5 ir 8.

jeigu __vardas__ == '__pagrindinis__' :
analizatorius = argparse. Argumentų analizatorius ( apibūdinimas = 'Affine šifravimo šifravimas iš tekstinio failo' )
analizatorius . pridėti_argumentą ( 'input_file' , padėti = 'Kelias į įvesties teksto failą' )
analizatorius . pridėti_argumentą ( '-k' , '--raktai' , tipo = g , numatytas = '5.8' , padėti = „Afininio šifro raktai formatu „a,b““ )
args = analizatorius . parse_args ( )

a , b = žemėlapį ( tarpt , args. raktai . padalintas ( ',' ) )

su atviras ( args. įvesties_failas , 'r' ) kaip failą :
tekstą = failą . skaityti ( )

# Ištraukite failo pavadinimą iš įvesties failo kelio
įvesties_failo pavadinimas , pratęsimas = tu . kelias . suskaidytas tekstas ( args. įvesties_failas )
numatytasis_išvesties_failas = įvesties_failo pavadinimas + '_šifruota' + pratęsimas

# Šifruokite tekstą naudodami afininį šifrą
šifruotas_tekstas = affine_cipher_encryption ( tekstą , a , b )

# Įrašykite šifruotą tekstą į naują failą
su atviras ( numatytasis_išvesties_failas , 'Į' ) kaip failą :
failą . rašyti ( šifruotas_tekstas )

Galiausiai, atlikus šifravimo funkciją, mūsų programa išsaugos išvestį su tuo pačiu failo plėtiniu kaip ir įvesties failas.

Dabar išsaugokite jį „affine_cipher.py“. Dabar paleiskite programą įvesdami šią komandą:

python affine_cipher. py -h

Jei neradote klaidos, išvestis atrodo taip, kaip šis paveikslėlis:


Alternatyvus vaizdas ir antraštė : Affine Cipher Python programa

Koncepcijos įrodymas

Turime konfidencialią žinutę tokiu pavadinimu „message.txt“ ir norime perduoti ją savo nariams:


Alternatyvus vaizdas ir antraštė : Paprastas tekstas

Taigi, mes naudojame programą, kurią sukūrėme prieš norėdami užšifruoti šį pranešimą naudodami Affine šifrą su raktais 3 ir 7. Komanda yra tokia:

python affine_cipher. py žinutę. txt -k 3 , 7


Alternatyvus vaizdas ir antraštė : Affine Cipher Python programa

Vieno akies mirksnio greičiu užšifruotas pranešimas sėkmingai sukuriamas ir išsaugomas „message_encrypted.txt“. Pažiūrėkime, kaip atrodo pranešimas:


Alternatyvus vaizdas ir antraštė : Afininis šifruotas tekstas

Kaip matote, pranešimas yra užšifruotas. Iššifruoti pranešimą gali tik mūsų nariai, žinantys šifravimo metodą ir jo raktus.

Išbandykite patys

Atsisiųskite šios programos šaltinio kodą mūsų GitHub puslapyje adresu https://github.com/bimando/Affine-Cipher .

Išvada

Apibendrinant galima pasakyti, kad „Affine“ šifro šifravimo metodas, viena alfabeto pakeitimo šifro forma, užtikrina didesnį saugumą naudojant du raktus, todėl raktą reikia atidžiai apsvarstyti. Norint suprasti afiniškojo šifro sudėtingumą, būtina suprasti tokias sąvokas kaip didžiausias bendras daliklis (GCD), pirminiai skaičiai ir modulinė aritmetika.

Afininė šifro lygtis, E(x) = (a.x + b) mod m, yra pagrindinė šifravimo priemonė, kur „a“ ir „b“ žymi raktus, o „x“ simbolizuoja paprasto teksto raidės indeksą. Įrodyta, kad automatizuotos Python programos, skirtos Affine šifro šifravimo procesui, įdiegimas efektyviai supaprastina didelio masto šifravimo užduotis. Programa apima pagrindines funkcijas, įskaitant bibliotekų importavimą, abėcėlės atvaizdavimą, šifravimo funkciją ir komandinės eilutės argumentų analizę įvesties ir išvesties keliams. Pažymėtina, kad scenarijus įgalina numatytuosius raktų ir išvesties failų pavadinimų nustatymus, kad palengvintų sklandų šifravimo procesą.

Dažnai užduodami klausimai (DUK)

1 klausimas: kas yra afinų šifras ir kuo jis skiriasi nuo Cezario šifro?

A1: Affine šifras yra monoalfabetinis pakeitimo šifras, kuriame šifravimui naudojami du raktai „a“ ir „b“. Priešingai, Cezario šifras naudoja fiksuotą trijų padėčių poslinkį kiekvienai paprastojo teksto raidei.

Q2. Kokios yra būtinos sąlygos suprasti afinų šifrą?

A2: Norint gerai suprasti afininį šifrą, labai svarbu suprasti tokias sąvokas kaip didžiausias bendras daliklis (GCD), pirminiai skaičiai ir modulinė aritmetika.

3 klausimas: kaip galiu užšifruoti pranešimą naudojant Python affine šifrą?

3 atsakymas: Norėdami automatizuoti Affine šifro šifravimo procesą, galite naudoti Python programą, kuri aprašyta straipsnyje. Programa efektyviai užšifruoja didelio masto teksto įvestis, supaprastindama šifravimo procedūrą. Straipsnyje pateikiamos nuoseklios instrukcijos, kaip importuoti bibliotekas, apibrėžti abėcėlės atvaizdavimą, sukurti šifravimo funkciją ir analizuoti įvesties ir išvesties kelių komandinės eilutės argumentus.