Wróć do informacji o e-podręczniku Wydrukuj Pobierz materiał do PDF Pobierz materiał do EPUB Pobierz materiał do MOBI Zaloguj się, aby dodać do ulubionych Zaloguj się, aby skopiować i edytować materiał Zaloguj się, aby udostępnić materiał Zaloguj się, aby dodać całą stronę do teczki

Tworzenie szyfrogramuszyfrogramszyfrogramu za pomocą asymetrycznego algorytmu RSA polega na wyznaczeniu pary kluczy: prywatnego i publicznego. Pozwalają one na zaszyfrowanie (klucz publicznyklucz publicznyklucz publiczny) i odszyfrowanie (klucz prywatnyklucz prywatnyklucz prywatny) wiadomości.

Tworzenie klucza publicznego i prywatnego

Przykład 1

Stwórzmy w języku Python funkcję generującą klucze RSA. Algorytm został szczegółowo opisany w e‑materiale wstępnym dotyczącym szyfru RSAPl0GrlFTpe‑materiale wstępnym dotyczącym szyfru 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, również opisane w e‑materiale wstępnymPl0GrlFTpe‑materiale wstępnym. W pierwszym kroku wybieramy dwie liczby pierwsze i oznaczamy je jako pq. Losujemy je z gotowego zbioru liczb pierwszych, zapisanego w liście pierwsze.

Następnie obliczamy wartość n jako iloczynu pq. 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 en) oraz klucz prywatny (para liczb dn).

Specyfikacja problemu:

Dane:

  • p – liczba naturalna pierwsza

  • q – liczba naturalna pierwsza

Wynik:

  • klucz prywatny algorytmu RSA i klucz publiczny algorytmu RSA

Linia 1. def klucze podkreślnik RSA otwórz nawias okrągły zamknij nawias okrągły dwukropek. Linia 3. def nwd otwórz nawias okrągły a przecinek b zamknij nawias okrągły dwukropek. Linia 4. kratka obliczanie NWD. Linia 5. while b dwukropek. Linia 6. a przecinek b znak równości b przecinek a procent b. Linia 7. return a. Linia 9. def odwr podkreślnik mod otwórz nawias okrągły a przecinek n zamknij nawias okrągły dwukropek. Linia 10. kratka obliczanie odwróconego modulo. Linia 11. p0 przecinek p1 przecinek a0 przecinek n0 znak równości 0 przecinek 1 przecinek a przecinek n. Linia 12. q przecinek r znak równości n0 prawy ukośnik prawy ukośnik a0 przecinek n0 procent a0. Linia 13. while r dwukropek. Linia 14. t znak równości p0 minus q asterysk p1. Linia 15. if t zamknij nawias ostrokątny znak równości 0 dwukropek. Linia 16. t znak równości t procent n. Linia 17. else dwukropek. Linia 18. t znak równości n minus otwórz nawias okrągły otwórz nawias okrągły minus t zamknij nawias okrągły procent n zamknij nawias okrągły. Linia 19. p0 przecinek p1 przecinek n0 przecinek a0 znak równości p1 przecinek t przecinek a0 przecinek r. Linia 20. q przecinek r znak równości n0 prawy ukośnik prawy ukośnik a0 przecinek n0 procent a0. Linia 21. return p1. Linia 23. kratka zasadnicza część funkcji RSA. Linia 24. from random import choice. Linia 25. pierwsze znak równości otwórz nawias kwadratowy 11 przecinek 13 przecinek 17 przecinek 19 przecinek 23 przecinek 29 przecinek 31 zamknij nawias kwadratowy kratka gotowa lista liczb pierwszych. Linia 26. p znak równości 0. Linia 27. q znak równości 0. Linia 28. while p znak równości znak równości q dwukropek. Linia 29. p przecinek q znak równości choice otwórz nawias okrągły pierwsze zamknij nawias okrągły przecinek choice otwórz nawias okrągły pierwsze zamknij nawias okrągły kratka funkcja choice wybiera losową liczbę z listę liczb pierwszych. Linia 30. phi przecinek n znak równości otwórz nawias okrągły p minus 1 zamknij nawias okrągły asterysk otwórz nawias okrągły q minus 1 zamknij nawias okrągły przecinek p asterysk q kratka obliczenie n i wartości funkcji Eulera. Linia 31. e znak równości 3 kratka dobieramy możliwie małą wartość dla e. Linia 32. d znak równości odwr podkreślnik mod otwórz nawias okrągły e przecinek phi zamknij nawias okrągły kratka obliczamy wartość d. Linia 33. while nwd otwórz nawias okrągły e przecinek phi zamknij nawias okrągły wykrzyknik znak równości 1 dwukropek. Linia 34. e plus znak równości 2. Linia 35. d znak równości odwr podkreślnik mod otwórz nawias okrągły e przecinek phi zamknij nawias okrągły. Linia 37. return otwórz nawias okrągły e przecinek n zamknij nawias okrągły przecinek otwórz nawias okrągły d przecinek n zamknij nawias okrągły kratka zwracamy klucze. Linia 39. kratka przykładowe wykonanie. Linia 40. print otwórz nawias okrągły klucze podkreślnik RSA otwórz nawias okrągły zamknij nawias okrągły zamknij nawias okrągły. Linia 42. kratka przykładowy wynik dwukropek. Linia 43. kratka otwórz nawias okrągły otwórz nawias okrągły 5 przecinek 551 zamknij nawias okrągły przecinek otwórz nawias okrągły 101 przecinek 551 zamknij nawias okrągły zamknij nawias okrągły.

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

Przykład 2

Szyfrowanie liczby t pozwalające uzyskać liczbę c polega na zastosowaniu wzoru:

c=temod n

gdzie e to wykładnik publiczny, a n 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ów

  • n – liczba naturalna

  • e – liczba naturalna

Wynik:

  • zaszyfrowany łańcuch znaków

Linia 1. def szyfrowanie podkreślnik RSA otwórz nawias okrągły tekst dwukropek str przecinek klucz podkreślnik publiczny dwukropek tuple zamknij nawias okrągły dwukropek. Linia 2. e przecinek n znak równości klucz podkreślnik publiczny. Linia 3. szyfr znak równości otwórz nawias kwadratowy otwórz nawias okrągły ord otwórz nawias okrągły t zamknij nawias okrągły asterysk asterysk e zamknij nawias okrągły procent n for t in tekst zamknij nawias kwadratowy. Linia 4. return szyfr. Linia 6. kratka przykład wykonania. Linia 7. szyfrogram znak równości szyfrowanie podkreślnik RSA otwórz nawias okrągły cudzysłów Python to interpreter cudzysłów przecinek otwórz nawias okrągły 5 przecinek 551 zamknij nawias okrągły zamknij nawias okrągły. Linia 8. print otwórz nawias okrągły szyfrogram zamknij nawias okrągły. Linia 10. kratka efekt działania. Linia 11. kratka otwórz nawias kwadratowy 245 przecinek 486 przecinek 203 przecinek 510 przecinek 384 przecinek 344 przecinek 185 przecinek 203 przecinek 384 przecinek 185 przecinek 421 przecinek 344 przecinek 203 przecinek 309 przecinek 171 przecinek 310 przecinek 171 przecinek 309 przecinek 203 przecinek 309 przecinek 171 zamknij nawias kwadratowy.

Analogicznie – odszyfrowywanie liczby c uzyskujące liczbę t polega na zastosowaniu wzoru:

t=cdmod n

gdzie d to wykładnik prywatny, a n to element klucza prywatnego.

Możemy zatem przygotować funkcję służącą do odszyfrowania tekstu.

Specyfikacja problemu:

Dane:

  • szyfrogram – łańcuch znaków

  • n – liczba naturalna

  • d – liczba naturalna

Wynik:

  • odszyfrowany łańcuch znaków

Linia 1. def odszyfrowanie podkreślnik RSA otwórz nawias okrągły szyfrogram dwukropek list przecinek klucz podkreślnik prywatny dwukropek tuple zamknij nawias okrągły dwukropek. Linia 2. d przecinek n znak równości klucz podkreślnik prywatny. Linia 3. jawny znak równości otwórz nawias kwadratowy chr otwórz nawias okrągły otwórz nawias okrągły kod asterysk asterysk d zamknij nawias okrągły procent n zamknij nawias okrągły for kod in szyfrogram zamknij nawias kwadratowy. Linia 4. return cudzysłów cudzysłów kropka join otwórz nawias okrągły jawny zamknij nawias okrągły. Linia 6. kratka przykład wykonania. Linia 7. szyfrogram znak równości otwórz nawias kwadratowy 245 przecinek 486 przecinek 203 przecinek 510 przecinek 384 przecinek 344 przecinek 185 przecinek 203 przecinek 384 przecinek 185 przecinek 421 przecinek 344 przecinek 203 przecinek 309 przecinek 171 przecinek 310 przecinek. Linia 8. 171 przecinek 309 przecinek 203 przecinek 309 przecinek 171 zamknij nawias kwadratowy. Linia 9. odszyfrowany znak równości odszyfrowanie podkreślnik RSA otwórz nawias okrągły szyfrogram przecinek otwórz nawias okrągły 101 przecinek 551 zamknij nawias okrągły zamknij nawias okrągły. Linia 10. print otwórz nawias okrągły odszyfrowany zamknij nawias okrągły. Linia 12. kratka efekt działania. Linia 13. kratka Python to interpreter.

Szyfrowanie i odszyfrowywanie w programie z graficznym interfejsem

Przykład 3

Możemy przygotować program z graficznym interfejsemgraficzny interfejsgraficznym interfejsem dla szyfrowania lub odszyfrowywania. Użyjemy do tego celu biblioteki PySimpleGuiPySimpleGuiPySimpleGui. Bibliotekę instalujemy z poziomu wiersza poleceń za pomocą komendy: python -m pip install PySimpleGUI

Wykorzystamy następujące elementy z tej biblioteki:

  • Text – prosty napis

  • Input – pojedyncza linijka na wpisanie tekstu

  • Radio – przełącznik (tylko jeden z listy przełączników jest włączony)

  • MLine – pole do wypisywania tekstu

  • Button – prosty przycisk z tekstem w środku

  • Window – 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 Windowread().

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().

Linia 1. def gui podkreślnik szyfrowanie podkreślnik RSA otwórz nawias okrągły zamknij nawias okrągły dwukropek. Linia 2. import PySimpleGUI as sg. Linia 3. uklad znak równości otwórz nawias kwadratowy otwórz nawias kwadratowy sg kropka Text otwórz nawias okrągły cudzysłów Podaj tekst jawny lub zaszyfrowany jako listę dwukropek cudzysłów zamknij nawias okrągły zamknij nawias kwadratowy przecinek. Linia 4. otwórz nawias kwadratowy sg kropka Input otwórz nawias okrągły key znak równości cudzysłów dane cudzysłów zamknij nawias okrągły zamknij nawias kwadratowy przecinek. Linia 5. otwórz nawias kwadratowy sg kropka Text otwórz nawias okrągły cudzysłów Wpisz klucz prywatny otwórz nawias okrągły jako tuplę zamknij nawias okrągły do odszyfrowania dwukropek cudzysłów zamknij nawias okrągły zamknij nawias kwadratowy przecinek. Linia 6. otwórz nawias kwadratowy sg kropka Input otwórz nawias okrągły key znak równości cudzysłów klucz podkreślnik prywatny cudzysłów zamknij nawias okrągły zamknij nawias kwadratowy przecinek. Linia 7. otwórz nawias kwadratowy sg kropka Text otwórz nawias okrągły cudzysłów Wpisz klucz publiczny otwórz nawias okrągły jako tuplę zamknij nawias okrągły do szyfrowania dwukropek cudzysłów zamknij nawias okrągły zamknij nawias kwadratowy przecinek. Linia 8. otwórz nawias kwadratowy sg kropka Input otwórz nawias okrągły key znak równości cudzysłów klucz podkreślnik publiczny cudzysłów zamknij nawias okrągły zamknij nawias kwadratowy przecinek. Linia 9. otwórz nawias kwadratowy sg kropka Radio otwórz nawias okrągły cudzysłów Szyfruj otwórz nawias okrągły kluczem publicznym zamknij nawias okrągły cudzysłów przecinek 1 przecinek key znak równości cudzysłów s cudzysłów przecinek default znak równości True zamknij nawias okrągły zamknij nawias kwadratowy przecinek. Linia 10. otwórz nawias kwadratowy sg kropka Radio otwórz nawias okrągły cudzysłów Odszyfruj otwórz nawias okrągły kluczem prywatnym zamknij nawias okrągły cudzysłów przecinek 1 przecinek key znak równości cudzysłów o cudzysłów zamknij nawias okrągły zamknij nawias kwadratowy przecinek. Linia 11. otwórz nawias kwadratowy sg kropka Text otwórz nawias okrągły cudzysłów Zszyfrowana lub jawna wiadomość dwukropek cudzysłów przecinek size znak równości otwórz nawias okrągły 50 przecinek 1 zamknij nawias okrągły przecinek auto podkreślnik size podkreślnik text znak równości True przecinek key znak równości cudzysłów minus OUT minus cudzysłów zamknij nawias okrągły zamknij nawias kwadratowy przecinek. Linia 12. otwórz nawias kwadratowy sg kropka MLine otwórz nawias okrągły size znak równości otwórz nawias okrągły 40 przecinek 8 zamknij nawias okrągły przecinek key znak równości apostrof minus MSG minus apostrof zamknij nawias okrągły zamknij nawias kwadratowy przecinek. Linia 13. otwórz nawias kwadratowy sg kropka Button otwórz nawias okrągły apostrof Wykonaj apostrof zamknij nawias okrągły przecinek sg kropka Exit otwórz nawias okrągły zamknij nawias okrągły zamknij nawias kwadratowy zamknij nawias kwadratowy. Linia 14. okno znak równości sg kropka Window otwórz nawias okrągły cudzysłów Szyfrowanie RSA cudzysłów przecinek uklad zamknij nawias okrągły. Linia 16. while True dwukropek. Linia 17. event przecinek values znak równości okno kropka read otwórz nawias okrągły zamknij nawias okrągły. Linia 19. if event znak równości znak równości apostrof Exit apostrof or event is None dwukropek. Linia 20. break. Linia 21. if event znak równości znak równości apostrof Wykonaj apostrof dwukropek. Linia 22. if values otwórz nawias kwadratowy apostrof s apostrof zamknij nawias kwadratowy dwukropek. Linia 23. k podkreślnik pub znak równości values otwórz nawias kwadratowy cudzysłów klucz podkreślnik publiczny cudzysłów zamknij nawias kwadratowy kropka split otwórz nawias okrągły cudzysłów przecinek cudzysłów zamknij nawias okrągły. Linia 24. k podkreślnik pub znak równości otwórz nawias okrągły int otwórz nawias okrągły k podkreślnik pub otwórz nawias kwadratowy 0 zamknij nawias kwadratowy zamknij nawias okrągły przecinek int otwórz nawias okrągły k podkreślnik pub otwórz nawias kwadratowy 1 zamknij nawias kwadratowy zamknij nawias okrągły zamknij nawias okrągły. Linia 25. wiadomosc znak równości values otwórz nawias kwadratowy cudzysłów dane cudzysłów zamknij nawias kwadratowy. Linia 26. szyfrogram znak równości szyfrowanie podkreślnik RSA otwórz nawias okrągły wiadomosc przecinek k podkreślnik pub zamknij nawias okrągły. Linia 27. okno otwórz nawias kwadratowy cudzysłów minus MSG minus cudzysłów zamknij nawias kwadratowy kropka update otwórz nawias okrągły szyfrogram zamknij nawias okrągły. Linia 28. if values otwórz nawias kwadratowy apostrof o apostrof zamknij nawias kwadratowy dwukropek. Linia 29. k podkreślnik priv znak równości values otwórz nawias kwadratowy cudzysłów klucz podkreślnik prywatny cudzysłów zamknij nawias kwadratowy kropka split otwórz nawias okrągły cudzysłów przecinek cudzysłów zamknij nawias okrągły. Linia 30. k podkreślnik priv znak równości otwórz nawias okrągły int otwórz nawias okrągły k podkreślnik priv otwórz nawias kwadratowy 0 zamknij nawias kwadratowy zamknij nawias okrągły przecinek int otwórz nawias okrągły k podkreślnik priv otwórz nawias kwadratowy 1 zamknij nawias kwadratowy zamknij nawias okrągły zamknij nawias okrągły. Linia 31. szyfr znak równości values otwórz nawias kwadratowy cudzysłów dane cudzysłów zamknij nawias kwadratowy kropka split otwórz nawias okrągły cudzysłów przecinek cudzysłów zamknij nawias okrągły. Linia 32. szyfr znak równości otwórz nawias kwadratowy int otwórz nawias okrągły e zamknij nawias okrągły for e in szyfr zamknij nawias kwadratowy. Linia 33. wynik znak równości odszyfrowanie podkreślnik RSA otwórz nawias okrągły szyfr przecinek k podkreślnik priv zamknij nawias okrągły. Linia 34. okno otwórz nawias kwadratowy cudzysłów minus MSG minus cudzysłów zamknij nawias kwadratowy kropka update otwórz nawias okrągły wynik zamknij nawias okrągły. Linia 35. okno kropka close otwórz nawias okrągły zamknij nawias okrągły.

Oto pełny kod programu, łączący przedstawione funkcje:

Linia 1. def klucze podkreślnik RSA otwórz nawias okrągły zamknij nawias okrągły dwukropek. Linia 3. def nwd otwórz nawias okrągły a przecinek b zamknij nawias okrągły dwukropek. Linia 4. kratka obliczanie NWD. Linia 5. while b dwukropek. Linia 6. a przecinek b znak równości b przecinek a procent b. Linia 7. return a. Linia 9. def odwr podkreślnik mod otwórz nawias okrągły a przecinek n zamknij nawias okrągły dwukropek. Linia 10. kratka obliczanie odwróconego modulo. Linia 11. p0 przecinek p1 przecinek a0 przecinek n0 znak równości 0 przecinek 1 przecinek a przecinek n. Linia 12. q przecinek r znak równości n0 prawy ukośnik prawy ukośnik a0 przecinek n0 procent a0. Linia 13. while r dwukropek. Linia 14. t znak równości p0 minus q asterysk p1. Linia 15. if t zamknij nawias ostrokątny znak równości 0 dwukropek. Linia 16. t znak równości t procent n. Linia 17. else dwukropek. Linia 18. t znak równości n minus otwórz nawias okrągły otwórz nawias okrągły minus t zamknij nawias okrągły procent n zamknij nawias okrągły. Linia 19. p0 przecinek p1 przecinek n0 przecinek a0 znak równości p1 przecinek t przecinek a0 przecinek r. Linia 20. q przecinek r znak równości n0 prawy ukośnik prawy ukośnik a0 przecinek n0 procent a0. Linia 21. return p1. Linia 23. kratka zasadnicza część funkcji RSA. Linia 24. from random import choice. Linia 25. pierwsze znak równości otwórz nawias kwadratowy 11 przecinek 13 przecinek 17 przecinek 19 przecinek 23 przecinek 29 przecinek 31 zamknij nawias kwadratowy kratka gotowa lista liczb pierwszych. Linia 26. p znak równości 0. Linia 27. q znak równości 0. Linia 28. while p znak równości znak równości q dwukropek. Linia 29. p przecinek q znak równości choice otwórz nawias okrągły pierwsze zamknij nawias okrągły przecinek choice otwórz nawias okrągły pierwsze zamknij nawias okrągły kratka funkcja choice wybiera losową liczbę z listę liczb pierwszych. Linia 30. phi przecinek n znak równości otwórz nawias okrągły p minus 1 zamknij nawias okrągły asterysk otwórz nawias okrągły q minus 1 zamknij nawias okrągły przecinek p asterysk q kratka obliczenie n i wartości funkcji Eulera. Linia 31. e znak równości 3 kratka dobieramy możliwie małą wartość dla e. Linia 32. d znak równości odwr podkreślnik mod otwórz nawias okrągły e przecinek phi zamknij nawias okrągły kratka obliczamy wartość d. Linia 33. while nwd otwórz nawias okrągły e przecinek phi zamknij nawias okrągły wykrzyknik znak równości 1 dwukropek. Linia 34. e plus znak równości 2. Linia 35. d znak równości odwr podkreślnik mod otwórz nawias okrągły e przecinek phi zamknij nawias okrągły. Linia 37. return otwórz nawias okrągły e przecinek n zamknij nawias okrągły przecinek otwórz nawias okrągły d przecinek n zamknij nawias okrągły kratka zwracamy klucze. Linia 40. def szyfrowanie podkreślnik RSA otwórz nawias okrągły tekst dwukropek str przecinek klucz podkreślnik publiczny dwukropek tuple zamknij nawias okrągły dwukropek. Linia 41. e przecinek n znak równości klucz podkreślnik publiczny. Linia 42. szyfr znak równości otwórz nawias kwadratowy otwórz nawias okrągły ord otwórz nawias okrągły t zamknij nawias okrągły asterysk asterysk e zamknij nawias okrągły procent n for t in tekst zamknij nawias kwadratowy. Linia 43. return szyfr. Linia 46. def odszyfrowanie podkreślnik RSA otwórz nawias okrągły szyfrogram dwukropek list przecinek klucz podkreślnik prywatny dwukropek tuple zamknij nawias okrągły dwukropek. Linia 47. d przecinek n znak równości klucz podkreślnik prywatny. Linia 48. jawny znak równości otwórz nawias kwadratowy chr otwórz nawias okrągły otwórz nawias okrągły kod asterysk asterysk d zamknij nawias okrągły procent n zamknij nawias okrągły for kod in szyfrogram zamknij nawias kwadratowy. Linia 49. return cudzysłów cudzysłów kropka join otwórz nawias okrągły jawny zamknij nawias okrągły. Linia 52. def gui podkreślnik szyfrowanie podkreślnik RSA otwórz nawias okrągły zamknij nawias okrągły dwukropek. Linia 53. import PySimpleGUI as sg. Linia 54. uklad znak równości otwórz nawias kwadratowy otwórz nawias kwadratowy sg kropka Text otwórz nawias okrągły cudzysłów Podaj tekst jawny lub zaszyfrowany jako listę dwukropek cudzysłów zamknij nawias okrągły zamknij nawias kwadratowy przecinek. Linia 55. otwórz nawias kwadratowy sg kropka Input otwórz nawias okrągły key znak równości cudzysłów dane cudzysłów zamknij nawias okrągły zamknij nawias kwadratowy przecinek. Linia 56. otwórz nawias kwadratowy sg kropka Text otwórz nawias okrągły cudzysłów Wpisz klucz prywatny otwórz nawias okrągły jako tuplę zamknij nawias okrągły do odszyfrowania dwukropek cudzysłów zamknij nawias okrągły zamknij nawias kwadratowy przecinek. Linia 57. otwórz nawias kwadratowy sg kropka Input otwórz nawias okrągły key znak równości cudzysłów klucz podkreślnik prywatny cudzysłów zamknij nawias okrągły zamknij nawias kwadratowy przecinek. Linia 58. otwórz nawias kwadratowy sg kropka Text otwórz nawias okrągły cudzysłów Wpisz klucz publiczny otwórz nawias okrągły jako tuplę zamknij nawias okrągły do szyfrowania dwukropek cudzysłów zamknij nawias okrągły zamknij nawias kwadratowy przecinek. Linia 59. otwórz nawias kwadratowy sg kropka Input otwórz nawias okrągły key znak równości cudzysłów klucz podkreślnik publiczny cudzysłów zamknij nawias okrągły zamknij nawias kwadratowy przecinek. Linia 60. otwórz nawias kwadratowy sg kropka Radio otwórz nawias okrągły cudzysłów Szyfruj otwórz nawias okrągły kluczem publicznym zamknij nawias okrągły cudzysłów przecinek 1 przecinek key znak równości cudzysłów s cudzysłów przecinek default znak równości True zamknij nawias okrągły zamknij nawias kwadratowy przecinek. Linia 61. otwórz nawias kwadratowy sg kropka Radio otwórz nawias okrągły cudzysłów Odszyfruj otwórz nawias okrągły kluczem prywatnym zamknij nawias okrągły cudzysłów przecinek 1 przecinek key znak równości cudzysłów o cudzysłów zamknij nawias okrągły zamknij nawias kwadratowy przecinek. Linia 62. otwórz nawias kwadratowy sg kropka Text otwórz nawias okrągły cudzysłów Zszyfrowana lub jawna wiadomość dwukropek cudzysłów przecinek size znak równości otwórz nawias okrągły 50 przecinek 1 zamknij nawias okrągły przecinek auto podkreślnik size podkreślnik text znak równości True przecinek key znak równości cudzysłów minus OUT minus cudzysłów zamknij nawias okrągły zamknij nawias kwadratowy przecinek. Linia 63. otwórz nawias kwadratowy sg kropka MLine otwórz nawias okrągły size znak równości otwórz nawias okrągły 40 przecinek 8 zamknij nawias okrągły przecinek key znak równości apostrof minus MSG minus apostrof zamknij nawias okrągły zamknij nawias kwadratowy przecinek. Linia 64. otwórz nawias kwadratowy sg kropka Button otwórz nawias okrągły apostrof Wykonaj apostrof zamknij nawias okrągły przecinek sg kropka Exit otwórz nawias okrągły zamknij nawias okrągły zamknij nawias kwadratowy zamknij nawias kwadratowy. Linia 65. okno znak równości sg kropka Window otwórz nawias okrągły cudzysłów Szyfrowanie RSA cudzysłów przecinek uklad zamknij nawias okrągły. Linia 67. while True dwukropek. Linia 68. event przecinek values znak równości okno kropka read otwórz nawias okrągły zamknij nawias okrągły. Linia 70. if event znak równości znak równości apostrof Exit apostrof or event is None dwukropek. Linia 71. break. Linia 72. if event znak równości znak równości apostrof Wykonaj apostrof dwukropek. Linia 73. if values otwórz nawias kwadratowy apostrof s apostrof zamknij nawias kwadratowy dwukropek. Linia 74. k podkreślnik pub znak równości values otwórz nawias kwadratowy cudzysłów klucz podkreślnik publiczny cudzysłów zamknij nawias kwadratowy kropka split otwórz nawias okrągły cudzysłów przecinek cudzysłów zamknij nawias okrągły. Linia 75. k podkreślnik pub znak równości otwórz nawias okrągły int otwórz nawias okrągły k podkreślnik pub otwórz nawias kwadratowy 0 zamknij nawias kwadratowy zamknij nawias okrągły przecinek int otwórz nawias okrągły k podkreślnik pub otwórz nawias kwadratowy 1 zamknij nawias kwadratowy zamknij nawias okrągły zamknij nawias okrągły. Linia 76. wiadomosc znak równości values otwórz nawias kwadratowy cudzysłów dane cudzysłów zamknij nawias kwadratowy. Linia 77. szyfrogram znak równości szyfrowanie podkreślnik RSA otwórz nawias okrągły wiadomosc przecinek k podkreślnik pub zamknij nawias okrągły. Linia 78. okno otwórz nawias kwadratowy cudzysłów minus MSG minus cudzysłów zamknij nawias kwadratowy kropka update otwórz nawias okrągły szyfrogram zamknij nawias okrągły. Linia 79. if values otwórz nawias kwadratowy apostrof o apostrof zamknij nawias kwadratowy dwukropek. Linia 80. k podkreślnik priv znak równości values otwórz nawias kwadratowy cudzysłów klucz podkreślnik prywatny cudzysłów zamknij nawias kwadratowy kropka split otwórz nawias okrągły cudzysłów przecinek cudzysłów zamknij nawias okrągły. Linia 81. k podkreślnik priv znak równości otwórz nawias okrągły int otwórz nawias okrągły k podkreślnik priv otwórz nawias kwadratowy 0 zamknij nawias kwadratowy zamknij nawias okrągły przecinek int otwórz nawias okrągły k podkreślnik priv otwórz nawias kwadratowy 1 zamknij nawias kwadratowy zamknij nawias okrągły zamknij nawias okrągły. Linia 82. szyfr znak równości values otwórz nawias kwadratowy cudzysłów dane cudzysłów zamknij nawias kwadratowy kropka split otwórz nawias okrągły cudzysłów przecinek cudzysłów zamknij nawias okrągły. Linia 83. szyfr znak równości otwórz nawias kwadratowy int otwórz nawias okrągły e zamknij nawias okrągły for e in szyfr zamknij nawias kwadratowy. Linia 84. wynik znak równości odszyfrowanie podkreślnik RSA otwórz nawias okrągły szyfr przecinek k podkreślnik priv zamknij nawias okrągły. Linia 85. okno otwórz nawias kwadratowy cudzysłów minus MSG minus cudzysłów zamknij nawias kwadratowy kropka update otwórz nawias okrągły wynik zamknij nawias okrągły. Linia 86. okno kropka close otwórz nawias okrągły zamknij nawias okrągły. Linia 89. gui podkreślnik szyfrowanie podkreślnik RSA otwórz nawias okrągły zamknij nawias okrągły.

Efektem działania takiego programu jest okno z możliwością wyboru operacji.

R7RMPjKD2Xm2v
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.
Dla zainteresowanych

Wśród wielu innych bibliotek umożliwiających operacje kryptograficzne możemy wyróżnić cryptographycryptographycryptography. Dysponuje ona gotowymi metodami dla różnych sposobów szyfrowania, m.in.:

  • RSA,

  • kodowanie Huffmana,

  • skróty wiadomości.

Słownik

cryptography
cryptography

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

graficzny interfejs
graficzny interfejs

nakładka graficzna na program, pozwalająca użytkownikom na korzystanie z niego w sposób interaktywny

klucz prywatny
klucz prywatny

służy do odszyfrowania informacji; jest w wyłącznym posiadaniu adresata informacji, więc tylko on może ją odczytać

klucz publiczny
klucz publiczny

służy do zaszyfrowania informacji

PySimpleGUI
PySimpleGUI

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

szyfrogram
szyfrogram

(inaczej kryptogram) wiadomość, która została zaszyfrowana