Sisällön aihe:
- Johdanto
- Edellytyksenä tieto
- Affine Cipher Equation
- Affine-salaus Pythonilla
- Käsitteen todiste
- Johtopäätös
- 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 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.
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.
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.
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 -hJos 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.