Afīna šifrēšana, izmantojot Python

Afina Sifresana Izmantojot Python



Satura tēma:

  1. Ievads
  2. Priekšnoteikums Zināšanas
  3. Afīna šifra vienādojums
  4. Afīna šifrēšana, izmantojot Python
  5. Koncepta pierādījums
  6. Secinājums
  7. Bieži uzdotie jautājumi (FAQ)

Afīniskais šifrs ir noteikta veida aizstāšanas šifrs, kas ietilpst monoalfabētisko šifru kategorijā. Atšķirībā no slavenākā Cēzara šifra, kas maina katru burtu vienkāršajā tekstā par fiksētu trīs pozīciju skaitu, Affine šifrā tiek izmantotas divas atslēgas (a un b). Atslēgu izvēlei ir jāpievērš īpaša uzmanība.

Priekšnoteikums Zināšanas

Lai dziļi izprastu šodienas tēmu, jums ir jāsaprot šādi jēdzieni:







  • Lielākais kopējais dalītājs (GCD) un kopskaitlis
  • Moduļu aritmētika

Šie jēdzieni ir detalizēti izskaidroti iepriekšējā rakstā ar nosaukumu “Afīna šifra matemātiskā pieeja”.



Afīna šifra vienādojums

Sāksim ar Affine šifra šifrēšanas formulu:



E(x) = (a.x + b) mod m
bijušais) Apzīmē x alfabētiskā indeksa šifrēšanu
a “Īpašās” pirmās atslēgas indeksa vērtība
x Vienkāršā burta indeksa vērtība
b Otrās atslēgas indeksa vērtība (papildu maiņas vērtība)
mod m Moduļu darbības alfabēta kopējam daudzumam, kas ir 26


Alternatīvais attēls un paraksts : Afīna šifrēšanas vienādojums





Piemēram, mēs vēlamies šifrēt “BIMANDO” vienkāršo tekstu ar 7 un 13 atslēgām. Izmantojot šādu tabulas indeksu, mēs vispirms pārveidojam vienkāršu tekstu tā atbilstošajā skaitļā:


Alternatīvais attēls un paraksts : indeksu numerācija



“BIMANDO” vienkāršais teksts tiek pārveidots par indeksācijas numuru “1 8 12 0 13 3 14”.


Alternatīvais attēls un paraksts : pārveidojiet vienkāršu tekstu indeksa numerācijas vērtībā

Pēc tam mēs izmantojam vienādojuma aprēķinu, un rezultāts tiek parādīts šādi:


Alternatīvais attēls un paraksts : Afīna šifrēšana

Tātad “BIMANDO” vienkāršais teksts tiek šifrēts, izmantojot Affine šifru ar atslēgām 7 un 13, kā rezultātā tiek iegūts “URTNAIH”.

Afīna šifrēšana, izmantojot Python

Tagad pieņemsim, ka vēlamies nosūtīt konfidenciālu ziņojumu, kurā ir virkne rindkopu. Affine šifrēšanas šifrēšana ar manuālo procesu prasa daudz pūļu un laika, un pastāv liela iespēja, ka aprēķins netiks veikts, vai ne? Tāpēc mums ir nepieciešama programma, kas automatizē Affine Cipher šifrēšanas procesu. Tālāk ir norādīts soli pa solim Python programmas izveides process:

1. Importējiet vajadzīgās bibliotēkas
Mūsu programma sākas ar nepieciešamo moduļu importēšanu, piemēram, argparse, string un OS attiecīgi komandrindas argumentu parsēšanai, virkņu operācijām un ar operētājsistēmu saistītajām funkcionalitātēm.

imports argparse
imports virkne
imports tu

2. Alfabēta kartēšanas definēšana
Pēc tam mēs definējam alfabētu kā mazo angļu burtu virkni. To izmanto, lai vēlāk šifrēšanas procesa laikā kartētu rakstzīmes.

alfabēts = virkne . ascii_mazie burti

3. Afīna šifrēšanas funkcija
Tā ir mūsu programmas galvenā funkcija. Tas aizņem ievades tekstu un divas atslēgas — “a” un “b”, un tekstam izmanto Affine šifra šifrēšanu, saglabājot teksta struktūru.

def affine_cipher_encryption ( tekstu , a , b ) :
šifrēts_teksts = ''
priekš char iekšā teksts:
ja char. zemāks ( ) iekšā alfabēts:
ja char. augšējais ( ) :
šifrēts_teksts + = chr ( ( ( a * ( vārdu ( char. zemāks ( ) ) - 97 ) + b ) % 26 ) + 65 )
cits :
šifrēts_teksts + = chr ( ( ( a * ( vārdu ( char ) - 97 ) + b ) % 26 ) + 97 )
cits :

4. Nosacītā galvenā pārbaude
Šajā bloka kodā pārbaudiet, vai tā tiek izpildīta kā galvenā programma. Tas iestata argumentu parsētāju ar skripta un tā argumentu aprakstiem. Nepieciešamais arguments ir tikai teksta faila ievades ceļš. Ja mēs nenorādam izvades ceļu, mēs vēlamies, lai tas iestatītu noklusējuma vērtību ievades faila nosaukumam ar pievienotu “_encrypted”. Argumentam “keys” mēs vēlamies, lai tas būtu formatēts kā “a,b”. Bet, ja mēs to iestatām, noklusējuma vērtība ir 5 un 8.

ja __vārds__ == '__galvenais__' :
parsētājs = argparse. ArgumentParser ( apraksts = 'Affine šifrēšanas šifrēšana no teksta faila' )
parsētājs . add_argument ( 'ievades_fails' , palīdzēt = 'Ceļš uz ievades teksta failu' )
parsētājs . add_argument ( '-k' , '-- taustiņi' , veids = str , noklusējuma = '5,8' , palīdzēt = 'Affine šifra atslēgas formātā 'a,b'' )
args = parsētājs . parse_args ( )

a , b = karte ( starpt , args. atslēgas . sadalīt ( ',' ) )

ar atvērts ( args. ievades_fails , 'r' ) failu :
tekstu = failu . lasīt ( )

# Izvelciet faila nosaukumu no ievades faila ceļa
ievades_faila nosaukums , pagarinājumu = tu . ceļš . sadalīts teksts ( args. ievades_fails )
noklusējuma_izejas_fails = ievades_faila nosaukums + '_šifrēts' + pagarinājums

# Šifrējiet tekstu, izmantojot afīnu šifru
šifrēts_teksts = affine_cipher_encryption ( tekstu , a , b )

# Ierakstiet šifrēto tekstu jaunā failā
ar atvērts ( noklusējuma_izejas_fails , 'Iekšā' ) failu :
failu . rakstīt ( šifrēts_teksts )

Visbeidzot, kad šifrēšanas funkcija ir pabeigta, mūsu programma saglabās izvadi ar tādu pašu faila paplašinājumu kā ievades fails.

Tagad saglabājiet to “affine_cipher.py”. Tagad palaidiet programmu, ierakstot šādu komandu:

python affine_cipher. py -h

Ja neatrodat kļūdu, izvade izskatās šādi:


Alternatīvais attēls un paraksti : Affine Cipher Python programma

Koncepta pierādījums

Mums ir konfidenciāls ziņojums ar šādu “message.txt” nosaukumu, un mēs vēlamies to pārraidīt saviem dalībniekiem:


Alternatīvais attēls un paraksts : Vienkāršs teksts

Tātad, mēs izmantojam programmu, kuru izveidojām, pirms vēlamies šifrēt šo ziņojumu, izmantojot Affine šifru ar atslēgām 3 un 7. Komanda ir šāda:

python affine_cipher. py ziņa. txt -k 3 , 7


Alternatīvais attēls un paraksti : Affine Cipher Python programma

Ar acu mirkšķināšanas ātrumu šifrētais ziņojums tiek veiksmīgi izveidots un saglabāts failā “message_encrypted.txt”. Pārbaudīsim, kā izskatās ziņojums:


Alternatīvais attēls un paraksti : Afīna šifrētais teksts

Kā redzat, ziņojums ir kodēts. Tikai mūsu dalībnieki, kuri zina šifrēšanas metodi un tās atslēgas, var atšifrēt ziņojumu.

Izmēģiniet to pats

Lejupielādējiet šo programmas pirmkodu mūsu GitHub lapā vietnē https://github.com/bimando/Affine-Cipher .

Secinājums

Noslēgumā jāsaka, ka Affine šifra šifrēšanas metode, monoalfabētiskā aizstāšanas šifra veids, piedāvā uzlabotu drošību, izmantojot divas atslēgas, kas prasa rūpīgu apsvēršanu atslēgas atlases laikā. Izpratne par tādiem jēdzieniem kā lielākais kopīgais dalītājs (GCD), pirmskaitļi un moduļu aritmētika ir būtiska, lai izprastu Affine šifra sarežģījumus.

Affine šifrēšanas vienādojums, E(x) = (a.x + b) mod m, kalpo kā galvenais šifrēšanas rīks, kur “a” un “b” apzīmē atslēgas un “x” simbolizē vienkāršā teksta burta indeksu. Tika pierādīts, ka automatizētas Python programmas ieviešana Affine šifrēšanas procesam efektīvi racionalizē liela mēroga šifrēšanas uzdevumus. Programma ietver galvenās funkcijas, tostarp bibliotēku importēšanu, alfabēta kartēšanu, šifrēšanas funkciju un komandrindas argumentu parsēšanu ievades un izvades ceļiem. Proti, skripts iespējo noklusējuma iestatījumus atslēgām un izvades failu nosaukumiem, lai atvieglotu netraucētu šifrēšanas procesu.

Bieži uzdotie jautājumi (FAQ)

Q1: Kas ir Afīna šifrs un kā tas atšķiras no Cēzara šifra?

A1: Affine šifrs ir monoalfabētiskā aizstāšanas šifrs, kas šifrēšanai izmanto divas atslēgas — “a” un “b”. Turpretim Cēzara šifrs izmanto fiksētu trīs pozīciju nobīdi katram vienkāršajā teksta burtam.

Q2. Kādi ir priekšnosacījumi, lai saprastu Affine šifru?

2. atbilde. Lai pilnībā izprastu Affine šifru, ir ļoti svarīgi saprast tādus jēdzienus kā lielākais kopīgais dalītājs (GCD), pirmskaitļi un modulārā aritmētika.

3. jautājums. Kā es varu šifrēt ziņojumu, izmantojot Python affine šifru?

A3. Lai automatizētu Affine šifra šifrēšanas procesu, varat izmantot Python programmu, kas ir aprakstīta rakstā. Programma efektīvi šifrē liela mēroga teksta ievades, vienkāršojot šifrēšanas procedūru. Rakstā ir sniegti soli pa solim norādījumi par bibliotēku importēšanu, alfabēta kartēšanas definēšanu, šifrēšanas funkcijas izveidi un komandrindas argumentu parsēšanu ievades un izvades ceļiem.