Szyfrowanie szyfrem afinicznym przy użyciu języka Python

Szyfrowanie Szyfrem Afinicznym Przy Uzyciu Jezyka Python



Temat treści:

  1. Wstęp
  2. Wymagana wiedza
  3. Równanie szyfru afinicznego
  4. Szyfrowanie szyfrem afinicznym przy użyciu języka Python
  5. Dowód koncepcji
  6. Wniosek
  7. Często zadawane pytania (FAQ)

Szyfr afiniczny reprezentuje specyficzny rodzaj szyfru podstawieniowego, należący do kategorii szyfrów monoalfabetycznych. W przeciwieństwie do bardziej znanego szyfru Cezara, który przesuwa każdą literę w tekście jawnym o stałą liczbę trzech pozycji, szyfr afiniczny wykorzystuje dwa klucze (a i b). Wybór kluczy powinien wymagać szczególnej uwagi.

Wymagana wiedza

Aby dogłębnie zrozumieć dzisiejszy temat, musisz zrozumieć następujące pojęcia:







  • Największy wspólny dzielnik (NWD) i liczba współpierwsza
  • Arytmetyka modułowa

Koncepcje te zostały szczegółowo wyjaśnione w poprzednim artykule zatytułowanym „Podejście matematyczne z szyfrem afinicznym”.



Równanie szyfru afinicznego

Zacznijmy od wzoru na szyfrowanie szyfrem afinicznym:



E(x) = (a.x + b) mod m
Dawny) Oznacza szyfrowanie indeksu alfabetycznego x
A Wartość indeksu „specjalnego” pierwszego klucza
X Wartość indeksu zwykłej litery
B Wartość indeksu drugiego klucza (dodatkowa wartość przesunięcia)
mod m Operacje modulo na całkowitej liczbie alfabetu, która wynosi 26


Obraz alternatywny i podpis : Równanie szyfru afinicznego





Na przykład chcemy zaszyfrować zwykły tekst „BIMANDO” za pomocą kluczy 7 i 13. Korzystając z poniższego indeksu tabeli, najpierw konwertujemy tekst jawny na odpowiadający mu numer:


Obraz alternatywny i podpis : Numeracja indeksów



Tekst jawny „BIMANDO” jest konwertowany na numer indeksowania na „1 8 12 0 13 3 14”.


Obraz alternatywny i podpis : Konwertuj zwykły tekst na wartość numeracji indeksu

Następnie stosujemy obliczenia równania, a wynik jest pokazany w następujący sposób:


Obraz alternatywny i podpis : Szyfrowanie afiniczne

Tak więc tekst jawny „BIMANDO” jest szyfrowany przy użyciu szyfru afinicznego z kluczami 7 i 13, co daje w wyniku „URTNAIH”.

Szyfrowanie szyfrem afinicznym przy użyciu języka Python

Załóżmy teraz, że chcemy wysłać poufną wiadomość zawierającą kilka akapitów. Ręczne szyfrowanie szyfrem Affine zajmuje dużo wysiłku i czasu oraz wiąże się z dużym ryzykiem pominięcia obliczeń, prawda? Dlatego potrzebny jest nam program, który zautomatyzuje proces szyfrowania szyfrem afinicznym. Poniżej przedstawiono krok po kroku proces tworzenia programu w języku Python:

1. Zaimportuj wymagane biblioteki
Nasz program rozpoczyna się od zaimportowania niezbędnych modułów, takich jak argparse, string i os, odpowiednio do analizowania argumentów wiersza poleceń, operacji na łańcuchach i funkcjonalności związanych z systemem operacyjnym.

import argparse
import strunowy
import Ty

2. Definiowanie mapowania alfabetycznego
Następnie definiujemy alfabet jako ciąg małych angielskich liter. Służy to do późniejszego mapowania znaków podczas procesu szyfrowania.

alfabet = strunowy . ascii_małe litery

3. Funkcja szyfrowania szyfrem afinicznym
To jest podstawowa funkcja naszego programu. Pobiera tekst wejściowy oraz dwa klucze „a” i „b” i stosuje do tekstu szyfrowanie afiniczne, zachowując jego strukturę.

def szyfrowanie_affine_cipher ( tekst , A , B ) :
zaszyfrowany_tekst = „”
Do zwęglać W tekst:
Jeśli zwęglać. niżej ( ) W alfabet:
Jeśli zwęglać. jest kolacja ( ) :
zaszyfrowany_tekst + = chr ( ( ( A * ( słowo ( zwęglać. niżej ( ) ) - 97 ) + b ) % 26 ) + 65 )
w przeciwnym razie :
zaszyfrowany_tekst + = chr ( ( ( A * ( słowo ( zwęglać ) - 97 ) + b ) % 26 ) + 97 )
w przeciwnym razie :

4. Warunkowe sprawdzanie główne
W tym kodzie blokowym sprawdź, czy jest on wykonywany jako program główny. Konfiguruje analizator argumentów z opisami skryptu i jego argumentów. Wymaganym argumentem jest jedynie ścieżka wejścia pliku tekstowego. Jeśli nie określimy ścieżki wyjściowej, chcemy, aby jako domyślną ustawiła nazwę pliku wejściowego z dodanym „_encrypted”. W przypadku argumentu „klucze” chcemy, aby był sformatowany jako „a, b”. Ale jeśli to ustawimy, wartością domyślną jest 5 i 8.

Jeśli __nazwa__ == '__główny__' :
parser = argparse. Analizator argumentów ( opis = „Szyfrowanie szyfrem afinicznym z pliku tekstowego” )
parser . dodaj_argument ( „plik_wejściowy” , pomoc = „Ścieżka do wejściowego pliku tekstowego” )
parser . dodaj_argument ( „-k” , '--Klucze' , typ = ul , domyślny = „5,8” , pomoc = „Klucze do szyfru afinicznego w formacie„ a, b ”” )
argumenty = parser . parse_args ( )

A , B = mapa ( wew , argumenty. Klucze . podział ( ',' ) )

z otwarty ( argumenty. plik_wejściowy , 'R' ) Jak plik :
tekst = plik . Czytać ( )

# Wyodrębnij nazwę pliku ze ścieżki pliku wejściowego
nazwa_pliku_wejściowego , rozszerzenie = Ty . ścieżka . podzielony tekst ( argumenty. plik_wejściowy )
domyślny_plik_wyjściowy = nazwa_pliku_wejściowego + „_zaszyfrowane” + rozszerzenie

# Zaszyfruj tekst za pomocą szyfru afinicznego
zaszyfrowany_tekst = szyfrowanie_affine_cipher ( tekst , A , B )

# Zapisz zaszyfrowany tekst w nowym pliku
z otwarty ( domyślny_plik_wyjściowy , 'w' ) Jak plik :
plik . pisać ( zaszyfrowany_tekst )

Na koniec, po zakończeniu funkcji szyfrowania, nasz program zapisze dane wyjściowe z tym samym rozszerzeniem pliku, co plik wejściowy.

Teraz zapisz go w „affine_cipher.py”. Teraz uruchom program wpisując następującą komendę:

Pythona affine_cipher. py -H

Jeśli nie znajdziesz żadnego błędu, dane wyjściowe będą wyglądać jak na poniższym obrazku:


Obraz alternatywny i podpis : Program w języku Python z szyfrem afinicznym

Dowód koncepcji

Mamy poufną wiadomość o następującej nazwie „message.txt” i chcemy ją udostępnić naszym członkom:


Obraz alternatywny i podpis : Zwykły tekst

Korzystamy więc z programu, który stworzyliśmy zanim chcemy zaszyfrować tę wiadomość za pomocą szyfru afinicznego z kluczami 3 i 7. Polecenie wygląda następująco:

Pythona affine_cipher. py wiadomość. tekst -k 3 , 7


Obraz alternatywny i podpis : Program w języku Python z szyfrem afinicznym

W mgnieniu oka zaszyfrowana wiadomość zostaje pomyślnie utworzona i zapisana w pliku „message_encrypted.txt”. Sprawdźmy jak wygląda wiadomość:


Obraz alternatywny i podpis : Zaszyfrowany tekst afiniczny

Jak widać, wiadomość jest zaszyfrowana. Tylko nasi członkowie, którzy znają metodę szyfrowania i jej klucze, są w stanie odszyfrować wiadomość.

Spróbuj sam

Pobierz kod źródłowy programu z naszej strony GitHub pod adresem https://github.com/bimando/Affine-Cipher .

Wniosek

Podsumowując, metoda szyfrowania szyfrem afinicznym, forma monoalfabetycznego szyfru podstawieniowego, zapewnia zwiększone bezpieczeństwo dzięki wykorzystaniu dwóch kluczy, co wymaga starannego rozważenia podczas wyboru klucza. Zrozumienie pojęć takich jak największy wspólny dzielnik (NWD), liczby współpierwsze i arytmetyka modułowa są niezbędne do zrozumienia zawiłości szyfru afinicznego.

Równanie szyfru afinicznego, E(x) = (a.x + b) mod m, służy jako podstawowe narzędzie do szyfrowania, gdzie „a” i „b” reprezentują klucze, a „x” symbolizuje indeks litery tekstu jawnego. Wykazano, że wdrożenie zautomatyzowanego programu w języku Python do procesu szyfrowania szyfrem afinicznym skutecznie usprawnia zadania szyfrowania na dużą skalę. Program zawiera kluczowe funkcje, w tym import bibliotek, mapowanie alfabetu, funkcję szyfrowania i analizowanie argumentów wiersza poleceń dla ścieżek wejściowych i wyjściowych. Warto zauważyć, że skrypt umożliwia domyślne ustawienia kluczy i nazw plików wyjściowych, aby ułatwić bezproblemowy proces szyfrowania.

Często zadawane pytania (FAQ)

P1: Co to jest szyfr afinski i czym różni się od szyfru Cezara?

Odpowiedź 1: Szyfr afiniczny to rodzaj monoalfabetycznego szyfru podstawieniowego, który wykorzystuje do szyfrowania dwa klucze „a” i „b”. Natomiast szyfr Cezara wykorzystuje stałe przesunięcie o trzy pozycje dla każdej litery w tekście jawnym.

Pytanie 2. Jakie są warunki wstępne zrozumienia szyfru afinicznego?

Odpowiedź 2: Aby dokładnie zrozumieć szyfr afiniczny, ważne jest, aby zrozumieć takie pojęcia, jak największy wspólny dzielnik (GCD), liczby współpierwsze i arytmetyka modułowa.

P3: Jak mogę zaszyfrować wiadomość przy użyciu szyfru afinicznego w Pythonie?

Odpowiedź 3: Aby zautomatyzować proces szyfrowania szyfrem afinicznym, możesz skorzystać z programu Python opisanego w artykule. Program skutecznie szyfruje wprowadzany tekst na dużą skalę, upraszczając procedurę szyfrowania. Artykuł zawiera instrukcje krok po kroku dotyczące importowania bibliotek, definiowania mapowania alfabetu, tworzenia funkcji szyfrowania i analizowania argumentów wiersza poleceń dla ścieżek wejściowych i wyjściowych.