Implementacja algorytmu RSA
Tworzenie szyfrogramu za pomocą asymetrycznego algorytmu RSA polega na wyznaczeniu pary kluczy: prywatnego i publicznego. Pozwalają one na zaszyfrowanie (klucz publiczny) i odszyfrowanie (klucz prywatny) wiadomości.
Tworzenie klucza publicznego i prywatnego
Stwórzmy w języku Python funkcję generującą klucze RSA. Dobierzemy wykładnik publiczny, aby funkcja działała możliwie szybko.
W przykładzie zdefiniowane są dwie funkcje pomocnicze: pierwsza obliczająca największy wspólny dzielnik, a druga - odwrócone modulo. Zasadnicza część funkcji będzie realizowała cztery kroki wyznaczania kluczy, opisane w sekcji Algorytm RSA. W pierwszym kroku wybieramy dwie liczby pierwsze i oznaczamy je jako p i q. Losujemy je z gotowego zbioru liczb pierwszych, zapisanego w liście pierwsze.
Następnie obliczamy wartość n jako iloczynu p i q. Liczba ta stanowi część klucza prywatnego i klucza publicznego. Przechodząc kolejne kroki algorytmu, wykorzystujemy funkcję Eulera, aby w następnym kroku dobrać wartość e, w naszym przypadku względnie małą, aby przyspieszyć obliczenia. Liczba e jest elementem klucza publicznego. Pozostaje tylko wyznaczenie liczby d za pomocą funkcji odwróconego modulo - staje się ona częścią klucza prywatnego. Na końcu kod zwraca klucz publiczny (para liczb e i n) oraz klucz prywatny (para liczb d i n).
Specyfikacja problemu:
Dane:
p– liczba naturalna pierwszaq– liczba naturalna pierwsza
Wynik:
klucz prywatny algorytmu RSA i klucz publiczny algorytmu RSA
Musimy pamiętać, że czasami proces obliczeń może trwać długo, gdyż język Python jest interpreterem i przy dużej liczbie obliczeń bywa dość powolny.
Szyfrowanie i odszyfrowywanie
Szyfrowanie liczby t pozwalające uzyskać liczbę c polega na zastosowaniu wzoru:
gdzie to wykładnik publiczny, a to element klucza publicznego.
Ponieważ tekst składa się z sekwencji znaków, z których każdy może być przedstawiony w postaci liczby (kodu znaku), szyfrowanie tekstu polegać będzie na szyfrowaniu kolejno każdego znaku z wykorzystaniem przedstawionego wzoru.
Specyfikacja problemu:
Dane:
tekst– łańcuch znakówn– liczba naturalnae– liczba naturalna
Wynik:
zaszyfrowany łańcuch znaków
Analogicznie – odszyfrowywanie liczby c uzyskujące liczbę t polega na zastosowaniu wzoru:
gdzie to wykładnik prywatny, a to element klucza prywatnego.
Możemy zatem przygotować funkcję służącą do odszyfrowania tekstu.
Specyfikacja problemu:
Dane:
szyfrogram– łańcuch znakówn– liczba naturalnad– liczba naturalna
Wynik:
odszyfrowany łańcuch znaków
Szyfrowanie i odszyfrowywanie w programie z graficznym interfejsem
Możemy przygotować program z graficznym interfejsem dla szyfrowania lub odszyfrowywania. Użyjemy do tego celu biblioteki PySimpleGui. Bibliotekę instalujemy z poziomu wiersza poleceń za pomocą komendy: python -m pip install PySimpleGUI
Wykorzystamy następujące elementy z tej biblioteki:
Text– prosty napisInput– pojedyncza linijka na wpisanie tekstuRadio– przełącznik (tylko jeden z listy przełączników jest włączony)MLine– pole do wypisywania tekstuButton– prosty przycisk z tekstem w środkuWindow– kontener reprezentujący nasze okno
Z obiektu Window możemy wyciągnąć obecne wartości elementów, jakie zawiera, oraz wydarzenia, które są ich udziałem (jak np. naciśnięcie przycisku). W tym celu użyjemy metody okna Window – read().
Niektóre z elementów przyjmują parametr key, określający klucz, który pozwoli nam pobierać wartość elementu za pomocą metody read().
Metoda close() dla Window zamyka okno.
Wartości elementów możemy aktualizować za pomocą metody update().
Oto pełny kod programu, łączący przedstawione funkcje:
Efektem działania takiego programu jest okno z możliwością wyboru operacji.

Wśród wielu innych bibliotek umożliwiających operacje kryptograficzne możemy wyróżnić cryptography. Dysponuje ona gotowymi metodami dla różnych sposobów szyfrowania, m.in.:
RSA,
kodowanie Huffmana,
skróty wiadomości.
Słownik
biblioteka umożliwiająca szyfrowanie; jej twórcy mieli na celu stworzenie standardowej biblioteki kryptograficznej, niezależnej od systemu operacyjnego; nie jest dostępna w standardowej instalacji języka Python – należy ją zainstalować, korzystając z mechanizmu pip
nakładka graficzna na program, pozwalająca użytkownikom na korzystanie z niego w sposób interaktywny
służy do odszyfrowania informacji; jest w wyłącznym posiadaniu adresata informacji, więc tylko on może ją odczytać
służy do zaszyfrowania informacji
biblioteka do wyświetlania prostych okien dialogowych, niezależna od systemu operacyjnego; nie jest dostępna w standardowej instalacji języka Python – należy ją zainstalować, korzystając z mechanizmu pip
(inaczej kryptogram) wiadomość, która została zaszyfrowana