W standardowej tabeli ASCII jest 95 znaków, których używamy do pisania – w obrębie jednej linii nie ma możliwości formatowania (użycia tabulatorów etc.). Do zbioru znaków należą litery, cyfry oraz inne znaki specjalne (w tym tylko 1 znak biały – spacja). Kody ASCII, o których mowa, to znaki od kodu 32 (znak spacji ' ') do kodu 126 (znak tyldy '~'). Liczba 95 jest iloczynem dwóch liczb pierwszych: 5 i 19.
Napisz program, który będzie szyfrował i wypisywał podane na wejściu wiadomości metodą RSA, na podstawie klucza publicznego, składającego się z wykładnika publicznego wykladnik i liczby n.
Program przetestuj dla następujących danych:
wykladnik = 11
n = 95
tekst_jawny = "Lex retro non agit"
Specyfikacja:
Dane:
wykladnik – wykładnik publiczny, liczba naturalna
n - iloczyn dwóch liczb pierwszych, liczba naturalna
tekst_jawny – ciąg znaków do zaszyfrowania
Wynik:
Program wypisuje na wyjście standardowe zaszyfrowaną wiadomość.
R1TPMA3U4I5Zf
Zaszyfruj tekst jawny z wykorzystaniem klucza publicznego. Uwzględnij odjęcie od kodów znaków liczby 32. Pamiętaj o dodaniu tej wartości przy odczycie znaków szyfrogramu.
Linia 1. public class Main otwórz nawias klamrowy.
Linia 2. static int potegowanie podkreślnik modulo otwórz nawias okrągły int a przecinek int b przecinek int n zamknij nawias okrągły otwórz nawias klamrowy.
Linia 3. int wynik znak równości 1 średnik.
Linia 4. a znak równości a procent n średnik.
Linia 6. if otwórz nawias okrągły a znak równości znak równości 0 zamknij nawias okrągły otwórz nawias klamrowy.
Linia 7. return 0 średnik.
Linia 8. zamknij nawias klamrowy.
Linia 10. while otwórz nawias okrągły b zamknij nawias ostrokątny 0 zamknij nawias okrągły otwórz nawias klamrowy.
Linia 11. if otwórz nawias okrągły b procent 2 znak równości znak równości 1 zamknij nawias okrągły otwórz nawias klamrowy.
Linia 12. wynik znak równości wynik asterysk a procent n średnik.
Linia 13. zamknij nawias klamrowy.
Linia 15. b prawy ukośnik znak równości 2 średnik.
Linia 16. a znak równości otwórz nawias okrągły a asterysk a zamknij nawias okrągły procent n średnik.
Linia 17. zamknij nawias klamrowy.
Linia 19. return wynik średnik.
Linia 20. zamknij nawias klamrowy.
Linia 22. static int szyfruj otwórz nawias okrągły int t przecinek int otwórz nawias kwadratowy zamknij nawias kwadratowy klucz podkreślnik publiczny zamknij nawias okrągły otwórz nawias klamrowy.
Linia 23. return potegowanie podkreślnik modulo otwórz nawias okrągły t przecinek klucz podkreślnik publiczny otwórz nawias kwadratowy 0 zamknij nawias kwadratowy przecinek klucz podkreślnik publiczny otwórz nawias kwadratowy 1 zamknij nawias kwadratowy zamknij nawias okrągły średnik.
Linia 24. zamknij nawias klamrowy.
Linia 26. static String szyfruj podkreślnik string otwórz nawias okrągły String tekst podkreślnik jawny przecinek int otwórz nawias kwadratowy zamknij nawias kwadratowy klucz podkreślnik publiczny zamknij nawias okrągły otwórz nawias klamrowy.
Linia 27. char otwórz nawias kwadratowy zamknij nawias kwadratowy szyfrogram znak równości new char otwórz nawias kwadratowy tekst podkreślnik jawny kropka length otwórz nawias okrągły zamknij nawias okrągły zamknij nawias kwadratowy średnik.
Linia 29. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny tekst podkreślnik jawny kropka length otwórz nawias okrągły zamknij nawias okrągły średnik plus plus i zamknij nawias okrągły otwórz nawias klamrowy.
Linia 30. int ch znak równości tekst podkreślnik jawny kropka charAt otwórz nawias okrągły i zamknij nawias okrągły minus 32 średnik prawy ukośnik prawy ukośnik krok 1.
Linia 31. ch znak równości szyfruj otwórz nawias okrągły ch przecinek klucz podkreślnik publiczny zamknij nawias okrągły średnik prawy ukośnik prawy ukośnik krok 2.
Linia 32. ch plus znak równości 32 średnik prawy ukośnik prawy ukośnik krok 3.
Linia 34. szyfrogram otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości otwórz nawias okrągły char zamknij nawias okrągły ch średnik.
Linia 35. zamknij nawias klamrowy.
Linia 37. return new String otwórz nawias okrągły szyfrogram zamknij nawias okrągły średnik.
Linia 38. zamknij nawias klamrowy.
Linia 40. public static void main otwórz nawias okrągły String otwórz nawias kwadratowy zamknij nawias kwadratowy args zamknij nawias okrągły otwórz nawias klamrowy.
Linia 41. int wykladnik znak równości 11 średnik.
Linia 42. int n znak równości 95 średnik.
Linia 43. String tekst podkreślnik jawny znak równości cudzysłów Lex retro non agit cudzysłów średnik.
Linia 45. int otwórz nawias kwadratowy zamknij nawias kwadratowy klucz podkreślnik publiczny znak równości otwórz nawias klamrowy wykladnik przecinek n zamknij nawias klamrowy średnik.
Linia 47. String szyfrogram znak równości szyfruj podkreślnik string otwórz nawias okrągły tekst podkreślnik jawny przecinek klucz podkreślnik publiczny zamknij nawias okrągły średnik.
Linia 48. System kropka out kropka println otwórz nawias okrągły szyfrogram zamknij nawias okrągły średnik.
Linia 49. zamknij nawias klamrowy.
Linia 50. zamknij nawias klamrowy.
31
Ćwiczenie 2
Dany jest szyfrogram zaszyfrowany za pomocą pewnego klucza publicznego. Masz dostęp do klucza prywatnego klucz_prywatny. Napisz program, który odszyfruje wiadomość i wypisze ją na wyjście standardowe. Przetestuj działanie programu dla następujących danych:
klucz_prywatny = {65, 95}
szyfrogram = "ZRst- d*.z^ -7t Ltde m7 de^Rd*-."
Specyfikacja:
Dane:
klucz_prywatny – tablica liczb naturalnych
szyfrogram – zaszyfrowana wiadomość, ciąg znaków
Wynik:
Program na standardowe wyjście wypisuje odszyfrowaną wiadomość.
RDRTtpBiZlzPZ
Linia 1. public class Main otwórz nawias klamrowy.
Linia 2. static int potegowanie podkreślnik modulo otwórz nawias okrągły int a przecinek int b przecinek int n zamknij nawias okrągły otwórz nawias klamrowy.
Linia 3. int wynik znak równości 1 średnik.
Linia 4. a znak równości a procent n średnik.
Linia 6. if otwórz nawias okrągły a znak równości znak równości 0 zamknij nawias okrągły otwórz nawias klamrowy.
Linia 7. return 0 średnik.
Linia 8. zamknij nawias klamrowy.
Linia 10. while otwórz nawias okrągły b zamknij nawias ostrokątny 0 zamknij nawias okrągły otwórz nawias klamrowy.
Linia 11. if otwórz nawias okrągły b procent 2 znak równości znak równości 1 zamknij nawias okrągły otwórz nawias klamrowy.
Linia 12. wynik znak równości wynik asterysk a procent n średnik.
Linia 13. zamknij nawias klamrowy.
Linia 15. b prawy ukośnik znak równości 2 średnik.
Linia 16. a znak równości otwórz nawias okrągły a asterysk a zamknij nawias okrągły procent n średnik.
Linia 17. zamknij nawias klamrowy.
Linia 19. return wynik średnik.
Linia 20. zamknij nawias klamrowy.
Linia 22. static int odszyfruj otwórz nawias okrągły int c przecinek int otwórz nawias kwadratowy zamknij nawias kwadratowy klucz podkreślnik prywatny zamknij nawias okrągły otwórz nawias klamrowy.
Linia 23. return potegowanie podkreślnik modulo otwórz nawias okrągły c przecinek klucz podkreślnik prywatny otwórz nawias kwadratowy 0 zamknij nawias kwadratowy przecinek klucz podkreślnik prywatny otwórz nawias kwadratowy 1 zamknij nawias kwadratowy zamknij nawias okrągły średnik.
Linia 24. zamknij nawias klamrowy.
Linia 26. static String odszyfruj podkreślnik string otwórz nawias okrągły String szyfrogram przecinek int otwórz nawias kwadratowy zamknij nawias kwadratowy klucz podkreślnik prywatny zamknij nawias okrągły otwórz nawias klamrowy.
Linia 27. char otwórz nawias kwadratowy zamknij nawias kwadratowy tekst znak równości new char otwórz nawias kwadratowy szyfrogram kropka length otwórz nawias okrągły zamknij nawias okrągły zamknij nawias kwadratowy średnik.
Linia 29. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny szyfrogram kropka length otwórz nawias okrągły zamknij nawias okrągły średnik plus plus i zamknij nawias okrągły otwórz nawias klamrowy.
Linia 30. int ch znak równości szyfrogram kropka charAt otwórz nawias okrągły i zamknij nawias okrągły minus 32 średnik prawy ukośnik prawy ukośnik krok 1.
Linia 31. ch znak równości odszyfruj otwórz nawias okrągły ch przecinek klucz podkreślnik prywatny zamknij nawias okrągły średnik prawy ukośnik prawy ukośnik krok 2.
Linia 32. ch plus znak równości 32 średnik prawy ukośnik prawy ukośnik krok 3.
Linia 34. tekst otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości otwórz nawias okrągły char zamknij nawias okrągły ch średnik.
Linia 35. zamknij nawias klamrowy.
Linia 37. return new String otwórz nawias okrągły tekst zamknij nawias okrągły średnik.
Linia 38. zamknij nawias klamrowy.
Linia 40. public static void main otwórz nawias okrągły String otwórz nawias kwadratowy zamknij nawias kwadratowy args zamknij nawias okrągły otwórz nawias klamrowy.
Linia 41. int otwórz nawias kwadratowy zamknij nawias kwadratowy klucz podkreślnik prywatny znak równości otwórz nawias klamrowy 65 przecinek 95 zamknij nawias klamrowy średnik.
Linia 42. String szyfrogram znak równości cudzysłów ZRst minus d asterysk kropka z kareta minus 7t Ltde m7 de kareta Rd asterysk minus kropka cudzysłów średnik.
Linia 44. String tekst znak równości odszyfruj podkreślnik string otwórz nawias okrągły szyfrogram przecinek klucz podkreślnik prywatny zamknij nawias okrągły średnik.
Linia 45. System kropka out kropka println otwórz nawias okrągły tekst zamknij nawias okrągły średnik.
Linia 46. zamknij nawias klamrowy.
Linia 47. zamknij nawias klamrowy.