Zgłaszanie | Wszystkie zgłoszenia | Najlepsze | Lista |
SZ_FR_079 - Szyfrowanie z kluczem prywatnym oraz publicznym |
Klucz prywatny
Określmy długość klucza np. 5. Generujemy superrosnący ciąg złożony z pięciu elementów np. 2 3 6 13 27 (ciąg superrosnący to taki, w którym i-ty wyraz jest większy niż suma wszystkich wyrazów jego poprzedzających).
Klucz publiczny
Określamy liczbę n, która jest większa od sumy wszystkich liczb ciągu superrosnącego np. 53 oraz określamy mnożnik m, który musi być względnie pierwszy ze wszystkimi liczbami superrosnącego ciągu, np. 17. Klucz publiczny tworzymy według schematu:
ai*m mod n, gdzie ai to kolejne wyrazy superrosnącego ciągu:
2*17 mod 53 = 34
3*17 mod 53 = 51
6*17 mod 53 = 49
13*17 mod 53 = 9
27*17 mod 53 = 35
A więc klucz publiczny ma postać: 34, 51, 49, 9, 35.
Szyfrowanie
Wiadomość do zaszyfrowania zapisujemy w postaci binarnej, następnie dzielimy ją na sekwencje o długości klucza, w naszym przypadku sekwencja jest długości pięciu bitów. Następnie i-ty bit przemnażamy przez i-ty element klucza publicznego:
Wiadomość: 10001 10011
Szyforgram: (1*34 + 1*35, 1*34 + 1*9 + 1*35) = (69, 78)
Deszyfrowanie
Odbiorca wiadomości posiada klucz prywatny oraz liczby n i m. W celu odszyfrowania wiadomości odbiorca musi najpierw określić n(n-1)≡1 mod m. Mnożąc każdą liczbę szyfrogramu przez n-1 mod m, otrzymuje wartości wiadomości szyfrowanej (tekstu jawnego).
Zadanie
Dla danego klucza pywatnego, liczb n i m utwórz klucz publiczny i zaszyfruj wiadomość.
Wejście
W pierwszym wierszu jedna liczba d określająca długość klucza prywatnego (nie większa niż 20).
W drugim wierszu d liczb określających klucz prywatny.
W trzecim wierszu liczby n i m.
W ostatnim wierszu wiadomość w postaci binarnej do zaszyfrowania (nie dłuższa niż 1000 bitów). Liczba bitów jest liczbą podzielną przez d.
Wszystkie liczby są nie większe niż 107 i spełniają założenia opisanego wyżej szyfrowania.
Wyjście
Ciąg liczb będący szyfrogramem
Przykład
Wejście: 5
2 3 6 13 27
53 17
1000110011 Wyjście: 69 78
Dodane przez: | Marcin Kasprowicz |
Data dodania: | 2023-12-03 |
Limit czasu wykonania programu: | 1s |
Limit długości kodu źródłowego | 50000B |
Limit pamięci: | 1536MB |
Cluster: | Cube (Intel G860) |
Języki programowania: | All except: ASM32-GCC MAWK BC C-CLANG NCSHARP CPP14-CLANG COBOL COFFEE D-CLANG D-DMD ELIXIR FANTOM FORTH GOSU GRV JS-MONKEY JULIA KTLN NIM OBJC OBJC-CLANG OCT PICO PROLOG R RACKET RUST SCM qobi CHICKEN SQLITE SWIFT UNLAMBDA VB.NET |