Affine Cipher-codering met behulp van Python

Affine Cipher Codering Met Behulp Van Python



Onderwerp van inhoud:

  1. Invoering
  2. Vereiste kennis
  3. Affiene cijfervergelijking
  4. Affine Cipher-codering met behulp van Python
  5. Bewijs van concept
  6. Conclusie
  7. Veelgestelde vragen (FAQ's)

Het affiene cijfer vertegenwoordigt een specifiek soort vervangingscijfer en valt onder de categorie monoalfabetische cijfers. In tegenstelling tot het bekendere Caesar-cijfer, waarbij elke letter in leesbare tekst een vast aantal posities verschuift, gebruikt het Affine-cijfer twee sleutels (a en b). Bij het kiezen van de sleutels moet speciale aandacht worden besteed.

Vereiste kennis

Om het onderwerp van vandaag diepgaand te begrijpen, moet je de volgende concepten begrijpen:







  • De grootste gemene deler (GCD) en co-priemgetal
  • Modulaire rekenkunde

Deze concepten worden in detail uitgelegd in het vorige artikel getiteld “Affine Cipher Wiskundige Benadering”.



Affiene cijfervergelijking

Laten we beginnen met de formule voor de Affine-codering:



E(x) = (a.x + b) mod m
Voormalig) Geeft een codering van de x alfabetische index aan
A Een indexwaarde van de 'speciale' eerste sleutel
X Een indexwaarde van de gewone letter
B Een indexwaarde van de tweede sleutel (extra shiftwaarde)
mod m De modulo-bewerkingen van het totale bedrag van het alfabet, namelijk 26


Alt-afbeelding en bijschrift : Affiene cijfervergelijking





We willen bijvoorbeeld de platte tekst 'BIMANDO' coderen met de sleutels 7 en 13. Met behulp van de volgende tabelindex converteren we eerst de leesbare tekst naar het overeenkomstige nummer:


Alt-afbeelding en bijschrift : Indexnummering



De platte tekst “BIMANDO” wordt omgezet in een indexnummer naar “1 8 12 0 13 3 14”.


Alt-afbeelding en bijschrift : Converteer een platte tekst naar een indexnummeringswaarde

Vervolgens passen we de vergelijkingsberekening toe en het resultaat wordt als volgt weergegeven:


Alt-afbeelding en bijschrift : Affiene codering

De leesbare tekst “BIMANDO” wordt dus gecodeerd met behulp van het Affine-cijfer met de sleutels 7 en 13, wat resulteert in “URTNAIH”.

Affine Cipher-codering met behulp van Python

Laten we nu zeggen dat we een vertrouwelijk bericht willen sturen dat een aantal paragrafen bevat. Het handmatig uitvoeren van Afine cipher-encryptie kost veel moeite en tijd, en er is een grote kans op foutieve berekeningen, toch? Daarom hebben we een programma nodig dat het Affine Cipher-coderingsproces automatiseert. Hieronder volgt het stapsgewijze proces voor het maken van een Python-programma:

1. Importeer de vereiste bibliotheken
Ons programma begint met het importeren van de benodigde modules zoals argparse, string en os voor respectievelijk het parseren van argumentatie op de opdrachtregel, stringbewerkingen en besturingssysteemgerelateerde functionaliteit.

importeren argparse
importeren snaar
importeren Jij

2. Alfabetische toewijzing definiëren
Vervolgens definiëren we het alfabet als een reeks kleine Engelse letters. Dit wordt gebruikt om de tekens later tijdens het coderingsproces in kaart te brengen.

alfabet = snaar . ascii_kleine letters

3. Functie voor affiene codering
Dit is de kernfunctie van ons programma. Het neemt de invoertekst en twee sleutels, “a” en “b”, en past de Affine-codering toe op de tekst, waarbij de structuur van de tekst behouden blijft.

zeker affiene_cijfer_encryptie ( tekst , A , B ) :
gecodeerde_tekst = ''
voor verkoold in tekst:
als verkoold. lager ( ) in alfabet:
als verkoold. isboven ( ) :
gecodeerde_tekst + = Chr ( ( ( A * ( woord ( verkoold. lager ( ) ) - 97 ) + b ) % 26 ) + 65 )
anders :
gecodeerde_tekst + = Chr ( ( ( A * ( woord ( verkoold ) - 97 ) + b ) % 26 ) + 97 )
anders :

4. Voorwaardelijke hoofdcontrole
Controleer in deze blokcode of deze als hoofdprogramma wordt uitgevoerd. Het stelt de argumentparser in met beschrijvingen voor het script en zijn argumenten. Het vereiste argument is slechts een pad van een tekstbestandinvoer. Als we het uitvoerpad niet specificeren, willen we dat het een standaardwaarde instelt op de naam van het invoerbestand met “_encrypted” eraan toegevoegd. Voor het argument “sleutels” willen we dat het wordt opgemaakt als “a, b”. Maar als we dit instellen, is de standaardwaarde 5 en 8.

als __naam__ == '__voornaamst__' :
parser = argparse. ArgumentParser ( beschrijving = 'Affine Cipher Encryptie uit een tekstbestand' )
parser . voeg_argument toe ( 'Invoer bestand' , hulp = 'Pad naar het invoertekstbestand' )
parser . voeg_argument toe ( '-k' , '--toetsen' , type = str , standaard = '5,8' , hulp = 'Sleutels voor het affiene cijfer in het formaat 'a, b'' )
arg = parser . parse_args ( )

A , B = kaart ( int , arg. sleutels . gesplitst ( ',' ) )

met open ( arg. Invoer bestand , 'R' ) als bestand :
tekst = bestand . lezen ( )

# Extraheer de bestandsnaam uit het invoerbestandspad
invoer_bestandsnaam , verlenging = Jij . pad . gesplitste ( arg. Invoer bestand )
standaard_uitvoer_bestand = invoer_bestandsnaam + '_gecodeerd' + extensie

# Versleutel de tekst met behulp van het affiene cijfer
gecodeerde_tekst = affiene_cijfer_encryptie ( tekst , A , B )

# Schrijf de gecodeerde tekst naar een nieuw bestand
met open ( standaard_uitvoer_bestand , 'In' ) als bestand :
bestand . schrijven ( gecodeerde_tekst )

Ten slotte zal ons programma, zodra de coderingsfunctie is voltooid, de uitvoer opslaan met dezelfde bestandsextensie als het invoerbestand.

Sla het nu op in 'affine_cipher.py'. Voer nu het programma uit door de volgende opdracht te typen:

python affiene_cijfer. py -H

Als u geen fout vindt, ziet de uitvoer er als volgt uit:


Alt-afbeelding en bijschrift : Affine Cipher Python-programma

Bewijs van concept

We hebben een vertrouwelijk bericht met de volgende naam “message.txt” en we willen dit naar onze leden verspreiden:


Alt-afbeelding en bijschrift : Platte tekst

We gebruiken dus het programma dat we hebben gemaakt voordat we dit bericht willen coderen met behulp van Affine cipher met de toetsen 3 en 7. Het commando is als volgt:

python affiene_cijfer. py bericht. tekst -k 3 , 7


Alt-afbeelding en bijschrift : Affine Cipher Python-programma

Met de snelheid van een oogwenk wordt het gecodeerde bericht met succes aangemaakt en opgeslagen in “message_encrypted.txt”. Laten we eens kijken hoe het bericht eruit ziet:


Alt-afbeelding en bijschrift : Verfijn cijfertekst

Zoals u kunt zien, is het bericht gecodeerd. Alleen onze leden die de coderingsmethode en de bijbehorende sleutels kennen, kunnen het bericht ontsleutelen.

Probeer het zelf

Download de broncode van dit programma op onze GitHub-pagina op https://github.com/bimando/Affine-Cipher .

Conclusie

Concluderend biedt de Affine cipher-encryptiemethode, een vorm van mono-alfabetische substitutie-codering, verbeterde beveiliging door het gebruik van twee sleutels, wat een zorgvuldige afweging vereist tijdens de sleutelselectie. Het begrijpen van concepten als de grootste gemene deler (GCD), co-priemgetallen en modulaire rekenkunde zijn essentieel voor het begrijpen van de fijne kneepjes van het affiene cijfer.

De Affiene cijfervergelijking, E(x) = (a.x + b) mod m, dient als het fundamentele hulpmiddel voor codering waarbij “a” en “b” de sleutels vertegenwoordigen en “x” de index van de leesbare letter symboliseert. Er werd aangetoond dat de implementatie van een geautomatiseerd Python-programma voor het Affine-coderingsproces de grootschalige encryptietaken efficiënt stroomlijnt. Het programma bevat de belangrijkste functionaliteiten, waaronder het importeren van bibliotheken, het in kaart brengen van alfabetten, een coderingsfunctie en het parseren van opdrachtregelargumenten voor invoer- en uitvoerpaden. Het script schakelt met name de standaardinstellingen voor de sleutels en uitvoerbestandsnamen in om een ​​naadloos versleutelingsproces te vergemakkelijken.

Veelgestelde vragen (FAQ's)

Vraag 1: Wat is het Affine-cijfer en waarin verschilt dit van het Caesar-cijfer?

A1: Het Affine-cijfer is een type mono-alfabetisch substitutiecijfer dat gebruik maakt van twee sleutels, “a” en “b”, voor codering. Het Caesar-cijfer gebruikt daarentegen een vaste verschuiving van drie posities voor elke letter in de leesbare tekst.

Vraag 2. Wat zijn de vereisten voor het begrijpen van het affiene cijfer?

A2: Om het affiene cijfer grondig te begrijpen, is het van cruciaal belang om concepten als de grootste gemene deler (GCD), co-priemgetallen en modulaire rekenkunde te begrijpen.

Vraag 3: Hoe kan ik een bericht coderen met behulp van het Affine-cijfer in Python?

A3: Om het Affine-coderingsproces te automatiseren, kunt u het Python-programma gebruiken dat in het artikel wordt beschreven. Het programma codeert efficiënt grootschalige tekstinvoer, waardoor de coderingsprocedure wordt vereenvoudigd. Het artikel biedt stapsgewijze instructies voor het importeren van de bibliotheken, het definiëren van de alfabetische toewijzing, het maken van de coderingsfunctie en het ontleden van de opdrachtregelargumenten voor invoer- en uitvoerpaden.