Affine-salaus Pythonilla

Affine Salaus Pythonilla



Sisällön aihe:

  1. Johdanto
  2. Edellytyksenä tieto
  3. Affine Cipher Equation
  4. Affine-salaus Pythonilla
  5. Käsitteen todiste
  6. Johtopäätös
  7. Usein kysytyt kysymykset (FAQ)

Affine-salaus edustaa tietynlaista korvaussalausta, joka kuuluu yksiaakkosisten salausten luokkaan. Toisin kuin tunnetumpi Caesar-salaus, joka siirtää jokaista kirjainta selkeässä tekstissä kiinteällä kolmella asemalla, affine-salauksessa käytetään kahta avainta (a ja b). Avainten valinnassa on syytä harkita erityistä huomiota.

Edellytyksenä tieto

Ymmärtääksesi syvästi tämän päivän aihetta, sinun on ymmärrettävä seuraavat käsitteet:







  • Suurin yhteinen jakaja (GCD) ja rinnakkaisalkuluku
  • Modulaarinen aritmetiikka

Nämä käsitteet on selitetty yksityiskohtaisesti edellisessä artikkelissa 'Affine Cipher Mathematical Approach'.



Affine Cipher Equation

Aloitetaan affine-salauksen kaavalla:



E(x) = (a.x + b) mod m
Entinen) Tarkoittaa x-aakkosindeksin salausta
a Ensimmäisen 'erikoisnäppäimen' indeksiarvo
x Tavallisen kirjaimen indeksiarvo
b Toisen näppäimen indeksiarvo (lisäsiirtoarvo)
mod m Modulo-operaatiot aakkosten kokonaismäärälle, joka on 26


Vaihtoehtoinen kuva ja kuvateksti : Affine Cipher Equation





Haluamme esimerkiksi salata 'BIMANDO' -selkotekstin avaimilla 7 ja 13. Seuraavaa taulukkoindeksiä käyttämällä muunnetaan ensin selväteksti sitä vastaavaksi numeroksi:


Vaihtoehtoinen kuva ja kuvateksti : Indeksinumerointi



'BIMANDO'-selkoteksti muunnetaan indeksointinumeroksi '1 8 12 0 13 3 14'.


Vaihtoehtoinen kuva ja kuvateksti : Muunna pelkkä teksti indeksinumerointiarvoksi

Sitten käytämme yhtälölaskentaa, ja tulos näytetään seuraavasti:


Vaihtoehtoinen kuva ja kuvateksti : Affine Ciphering

Joten 'BIMANDO' -selväteksti salataan Affine-salauksella avaimilla 7 ja 13, mikä johtaa 'URTNAIH'.

Affine-salaus Pythonilla

Oletetaan nyt, että haluamme lähettää luottamuksellisen viestin, joka sisältää joukon kappaleita. Affine-salauksen tekeminen manuaalisella prosessilla vie paljon vaivaa ja aikaa, ja sillä on suuri mahdollisuus epäonnistua laskelmassa, eikö niin? Siksi tarvitsemme ohjelman, joka automatisoi Affine Cipher -salausprosessin. Seuraava on vaiheittainen prosessi Python-ohjelman luomiseksi:

1. Tuo tarvittavat kirjastot
Ohjelmamme alkaa tuomalla tarvittavat moduulit, kuten argparse, string ja os komentorivin argumenttien jäsennystä, merkkijonotoimintoja ja käyttöjärjestelmään liittyviä toimintoja varten.

tuonti argparse
tuonti merkkijono
tuonti sinä

2. Aakkoskartoituksen määrittäminen
Sitten määrittelemme aakkoset englannin pienten kirjainten merkkijonoksi. Tätä käytetään merkkien kartoittamiseen salausprosessin aikana myöhemmin.

aakkoset = merkkijono . ascii_pienet kirjaimet

3. Affine Cipher Encryption Function
Tämä on ohjelmamme ydintoiminto. Se ottaa syötetyn tekstin ja kaksi avainta, 'a' ja 'b', ja käyttää tekstiin Affine-salausta, joka säilyttää tekstin rakenteen.

def affine_cipher_encryption ( teksti , a , b ) :
salattu_teksti = ''
varten hiiltyä sisään teksti:
jos hiiltyä. alempi ( ) sisään aakkoset:
jos hiiltyä. ylempi ( ) :
salattu_teksti + = chr ( ( ( * ( sana ( hiiltyä. alempi ( ) ) - 97 ) + b ) % 26 ) + 65 )
muu :
salattu_teksti + = chr ( ( ( * ( sana ( hiiltyä ) - 97 ) + b ) % 26 ) + 97 )
muu :

4. Ehdollinen päätarkastus
Tarkista tässä lohkokoodissa, suoritetaanko se pääohjelmana. Se määrittää argumentin jäsentimen, joka sisältää kuvaukset skriptille ja sen argumenteille. Vaadittu argumentti on vain tekstitiedoston syötteen polku. Kun emme määritä lähtöpolkua, haluamme sen asettavan oletusarvon syöttötiedoston nimeksi, johon on liitetty '_encrypted'. Haluamme, että “avaimet”-argumentti muotoillaan muotoon “a,b”. Mutta jos asetamme sen, oletusarvot ovat 5 ja 8.

jos __nimi__ == '__main__' :
jäsentäjä = argparse. ArgumentParser ( kuvaus = 'Affine Cipher Encryption tekstitiedostosta' )
jäsentäjä . add_argument ( 'syöttötiedosto' , auta = 'Polku syöttötekstitiedostoon' )
jäsentäjä . add_argument ( '-k' , '--avaimet' , tyyppi = str , oletuksena = '5,8' , auta = 'Affine-salauksen avaimet muodossa 'a,b'' )
args = jäsentäjä . parse_args ( )

a , b = kartta ( int , args. avaimet . jakaa ( ',' ) )

kanssa avata ( args. input_file , 'r' ) kuten tiedosto :
teksti = tiedosto . lukea ( )

# Pura tiedoston nimi syöttötiedoston polusta
syötetiedoston_nimi , laajennus = sinä . polku . jaettu teksti ( args. input_file )
oletus_tulostustiedosto = input_filename + '_salattu' + laajennus

# Salaa teksti käyttämällä affinista salausta
salattu_teksti = affine_cipher_encryption ( teksti , a , b )

# Kirjoita salattu teksti uuteen tiedostoon
kanssa avata ( oletus_tulostustiedosto , 'Sisään' ) kuten tiedosto :
tiedosto . kirjoittaa ( salattu_teksti )

Lopuksi, kun salaustoiminto on tehty, ohjelmamme tallentaa tulosteen samalla tiedostotunnisteella kuin syöttötiedosto.

Tallenna se nyt tiedostoon 'affine_cipher.py'. Suorita nyt ohjelma kirjoittamalla seuraava komento:

python affine_cipher. py -h

Jos et löydä virhettä, tulos näyttää seuraavalta kuvalta:


Vaihtoehtoinen kuva ja kuvateksti : Affine Cipher Python -ohjelma

Todiste käsitteestä

Meillä on luottamuksellinen viesti, jonka nimi on 'message.txt', ja haluamme lähettää sen jäsenillemme:


Vaihtoehtoinen kuva ja kuvateksti : Selkeä teksti

Joten käytämme ohjelmaa, jonka loimme ennen kuin haluamme salata tämän viestin käyttämällä Affine-salausta avaimilla 3 ja 7. Komento on seuraava:

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


Vaihtoehtoinen kuva ja kuvateksti : Affine Cipher Python -ohjelma

Salattu viesti luodaan ja tallennetaan tiedostoon 'message_encrypted.txt' silmänräpäyksen nopeudella. Katsotaan miltä viesti näyttää:


Vaihtoehtoinen kuva ja kuvateksti : Affine Salateksti

Kuten näet, viesti on sekoitettu. Vain jäsenemme, jotka tuntevat salausmenetelmän ja sen avaimet, voivat purkaa viestin.

Kokeile itse

Lataa tämä ohjelman lähdekoodi GitHub-sivultamme osoitteessa https://github.com/bimando/Affine-Cipher .

Johtopäätös

Yhteenvetona voidaan todeta, että Affine-salauksen salausmenetelmä, yksiaakkosisen korvaussalauksen muoto, tarjoaa parannetun turvallisuuden käyttämällä kahta avainta, mikä vaatii huolellista harkintaa avaimen valinnassa. Sellaisten käsitteiden kuin Greatest Common Divisor (GCD), yhteisalkuluvut ja modulaarinen aritmetiikka ymmärtäminen on välttämätöntä affinisen salauksen monimutkaisuuden ymmärtämiseksi.

Affine-salausyhtälö, E(x) = (a.x + b) mod m, toimii salauksen perustyökaluna, jossa 'a' ja 'b' edustavat avaimia ja 'x' symboloi selväkielisen kirjaimen indeksiä. Automaattisen Python-ohjelman toteutuksen Affine-salauksen salausprosessiin osoitettiin virtaviivaistavan laajamittaisia ​​salaustehtäviä tehokkaasti. Ohjelma sisältää tärkeimmät toiminnot, kuten kirjastojen tuonnin, aakkoskartoituksen, salaustoiminnon ja komentoriviargumenttien jäsentämisen tulo- ja lähtöpolkuja varten. Erityisesti komentosarja mahdollistaa avainten ja tulostetiedostojen nimien oletusasetukset saumattoman salausprosessin helpottamiseksi.

Usein kysytyt kysymykset (FAQ)

Kysymys 1: Mikä on Affine-salaus ja miten se eroaa Caesar-salauksesta?

A1: Affine-salaus on eräänlainen yksiaakkosinen korvaava salaus, joka käyttää salaukseen kahta avainta, 'a' ja 'b'. Sitä vastoin Caesar-salaus käyttää kiinteää kolmen paikan siirtoa jokaiselle selväkieliselle kirjaimelle.

Q2. Mitkä ovat affine-salauksen ymmärtämisen edellytykset?

Vastaus 2: Affine-salauksen perusteellisen ymmärtämisen kannalta on ratkaisevan tärkeää ymmärtää sellaisia ​​käsitteitä kuin suurin yhteinen jakaja (GCD), yhteisalkuluvut ja modulaarinen aritmetiikka.

Kysymys 3: Kuinka voin salata viestin Pythonin affine-salauksella?

Vastaus 3: Voit automatisoida Affine-salauksen salausprosessin käyttämällä artikkelissa kuvattua Python-ohjelmaa. Ohjelma salaa tehokkaasti laajamittaiset tekstisyötteet, mikä yksinkertaistaa salausmenettelyä. Artikkeli sisältää vaiheittaiset ohjeet kirjastojen tuomiseen, aakkoskartoituksen määrittämiseen, salausfunktion luomiseen ja komentoriviargumenttien jäsentämiseen tulo- ja lähtöpolkuja varten.