Affine chifferkryptering med Python

Affine Chifferkryptering Med Python



Ämne för innehåll:

  1. Introduktion
  2. Förkunskaper
  3. Affin chifferekvation
  4. Affine chifferkryptering med Python
  5. Bevis på koncept
  6. Slutsats
  7. Vanliga frågor (FAQs)

Det affina chifferet representerar en specifik typ av substitutionschiffer, som faller under kategorin monoalfabetiska chiffer. Till skillnad från det mer kända Caesar-chifferet, som förskjuter varje bokstav i klartext med ett fast tre antal positioner, använder Affine-chifferet två nycklar (a och b). Att välja nycklar bör behöva övervägas särskilt.

Förkunskaper

För att förstå dagens ämne på djupet måste du förstå följande begrepp:







  • The Greatest Common Divisor (GCD) & Co-prime number
  • Modulär aritmetik

Dessa begrepp förklaras i detalj i den tidigare artikeln med titeln 'Affine Cipher Mathematical Approach'.



Affin chifferekvation

Låt oss börja med formeln för Affine-chifferkrypteringen:



E(x) = (a.x + b) mod m
Före detta) Betecknar en kryptering av det alfabetiska x-indexet
a Ett indexvärde för den 'speciella' första nyckeln
x Ett indexvärde för den vanliga bokstaven
b Ett indexvärde för den andra nyckeln (extra skiftvärde)
mod m Modulo-operationerna för den totala mängden av alfabetet som är 26


Alt-bild och bildtext : Affin chifferekvation





Till exempel vill vi kryptera 'BIMANDO' klartext med 7 och 13 nycklar. Med hjälp av följande tabellindex konverterar vi först klartexten till dess motsvarande nummer:


Alt-bild och bildtext : Indexnumrering



'BIMANDO' klartext omvandlas till ett indexnummer till '1 8 12 0 13 3 14'.


Alt-bild och bildtext : Konvertera en klartext till ett indexnumreringsvärde

Sedan tillämpar vi ekvationsberäkningen, och resultatet visas som följer:


Alt-bild och bildtext : Affin chiffering

Så, 'BIMANDO' klartext krypteras med Affine-chiffer med nycklar 7 och 13 vilket resulterar i 'URTNAIH'.

Affine chifferkryptering med Python

Låt oss nu säga att vi vill skicka ett konfidentiellt meddelande som innehåller en massa stycken. Att göra Affine-chifferkryptering med den manuella processen tar mycket ansträngning och tid, och har stor chans att missberäkning, eller hur? Därför behöver vi ett program som automatiserar Affine Cipher-krypteringsprocessen. Följande är steg-för-steg-processen för att skapa ett Python-program:

1. Importera de obligatoriska biblioteken
Vårt program börjar med att importera de nödvändiga modulerna som argparse, sträng och os för kommandoradsargumentanalys, strängoperationer respektive operativsystemrelaterad funktionalitet.

importera argparse
importera sträng
importera du

2. Definiera alfabetsmapping
Sedan definierar vi alfabetet som en sträng av engelska små bokstäver. Detta används för att kartlägga tecknen under krypteringsprocessen senare.

alfabet = sträng . ascii_små bokstäver

3. Affine chifferkrypteringsfunktion
Detta är kärnfunktionen i vårt program. Den tar den inmatade texten och två nycklar, 'a' och 'b', och tillämpar Affine-krypteringen på texten, vilket bevarar textens struktur.

def affine_cipher_encryption ( text , a , b ) :
krypterad_text = ''
för röding i text:
om röding. lägre ( ) i alfabet:
om röding. isupper ( ) :
encrypted_text + = chr ( ( ( en * ( ord ( röding. lägre ( ) ) - 97 ) + b ) % 26 ) + 65 )
annan :
encrypted_text + = chr ( ( ( en * ( ord ( röding ) - 97 ) + b ) % 26 ) + 97 )
annan :

4. Villkorlig huvudkontroll
I den här blockkoden, kontrollera om den körs som huvudprogram. Den ställer in argumentparsern med beskrivningar för skriptet och dess argument. Det obligatoriska argumentet är bara en sökväg till en textfil. När vi inte anger utdatasökvägen vill vi att den ska ställa in en standard för indatafilens namn med '_encrypted' tillagd till den. För argumentet 'nycklar' vill vi att det ska formateras till 'a,b'. Men om vi ställer in det är standardvärdet 5 och 8.

om __namn__ == '__huvud__' :
parser = argparse. ArgumentParser ( beskrivning = 'Affine chifferkryptering från en textfil' )
parser . add_argument ( 'indatafil' , hjälp = 'Sökväg till inmatningstextfilen' )
parser . add_argument ( '-k' , '--nycklar' , typ = str , standard = '5,8' , hjälp = 'Nycklar för Affine Cipher i formatet 'a,b'' )
args = parser . parse_args ( )

a , b = Karta ( int , args. nycklar . dela ( ',' ) )

med öppen ( args. indatafil , 'r' ) som fil :
text = fil . läsa ( )

# Extrahera filnamnet från indatafilens sökväg
input_filename , förlängning = du . väg . splittext ( args. indatafil )
default_output_file = input_filename + '_encrypted' + förlängning

# Kryptera texten med det affina chiffer
krypterad_text = affine_cipher_encryption ( text , a , b )

# Skriv den krypterade texten till en ny fil
med öppen ( default_output_file , 'I' ) som fil :
fil . skriva ( krypterad_text )

Slutligen, när krypteringsfunktionen är klar, kommer vårt program att spara utdata med samma filtillägg som indatafilen.

Spara det nu till 'affine_cipher.py'. Kör nu programmet genom att skriva följande kommando:

python affine_cipher. py -h

Om du inte hittar något fel ser resultatet ut som följande bild:


Alt-bild och bildtext : Affine Cipher Python Program

Bevis på koncept

Vi har ett konfidentiellt meddelande med följande 'message.txt'-namn, och vi vill sända det till våra medlemmar:


Alt-bild och bildtext : Oformatterad text

Så vi använder programmet som vi skapade innan vi vill kryptera det här meddelandet med Affine-chiffer med nycklarna 3 och 7. Kommandot är som följer:

python affine_cipher. py meddelande. Text -k 3 , 7


Alt-bild och bildtext : Affine Cipher Python Program

Med ett ögonblicks snabbhet skapas det krypterade meddelandet framgångsrikt och sparas i 'message_encrypted.txt'. Låt oss kolla hur meddelandet ser ut:


Alt-bild och bildtext : Affin chiffertext

Som du kan se är meddelandet förvrängt. Endast våra medlemmar som känner till chiffermetoden och dess nycklar kan dekryptera meddelandet.

Prova själv

Ladda ner denna programkällkod på vår GitHub-sida på https://github.com/bimando/Affine-Cipher .

Slutsats

Sammanfattningsvis erbjuder Affine-krypteringsmetoden, en form av monoalfabetisk ersättnings-chiffer, ökad säkerhet genom att använda två nycklar, vilket kräver en noggrann övervägande under nyckelval. Att förstå begreppen som Greatest Common Divisor (GCD), samprimtal och modulär aritmetik är avgörande för att förstå det affina chifferets krångligheter.

Affine chifferekvationen, E(x) = (a.x + b) mod m, fungerar som det grundläggande verktyget för kryptering där 'a' och 'b' representerar nycklarna och 'x' symboliserar klartextbokstavens index. Implementeringen av ett automatiserat Python-program för Affine-chifferkrypteringsprocessen demonstrerades för att effektivisera de storskaliga krypteringsuppgifterna. Programmet innehåller nyckelfunktionerna inklusive import av bibliotek, alfabetsmappning, en krypteringsfunktion och kommandoradsargumentanalys för in- och utmatningsvägar. Speciellt är att skriptet aktiverar standardinställningarna för nycklar och utdatafilnamn för att underlätta en sömlös krypteringsprocess.

Vanliga frågor (FAQs)

F1: Vad är det affina chiffer och hur skiljer det sig från Caesar chiffer?

A1: Affinchifferet är en typ av monoalfabetisk substitutionschiffer som använder två nycklar, 'a' och 'b', för kryptering. Däremot använder Caesar-chifferet en fast förskjutning av tre positioner för varje bokstav i klartexten.

Q2. Vilka är förutsättningarna för att förstå Affine-chifferet?

S2: För att förstå Affine-chifferet noggrant är det avgörande att ha ett grepp om begrepp som Greatest Common Divisor (GCD), samprimtal och modulär aritmetik.

F3: Hur kan jag kryptera ett meddelande med Affine-chifferet i Python?

S3: För att automatisera Affine-chifferkrypteringsprocessen kan du använda Python-programmet som beskrivs i artikeln. Programmet krypterar effektivt storskalig textinmatning, vilket förenklar krypteringsproceduren. Artikeln innehåller steg-för-steg-instruktioner om hur du importerar biblioteken, definierar alfabetmappningen, skapar krypteringsfunktionen och analyserar kommandoradsargumenten för inmatnings- och utmatningsvägar.