Laboratorium kryptograficzne dla licealistów 2

Podobne dokumenty
Laboratorium kryptograficzne dla licealistów 1

Laboratorium kryptograficzne dla gimnazjalistów 1

Laboratorium kryptograficzne dla licealistów 1

Laboratorium kryptograficzne dla licealistów 4

Laboratorium kryptograficzne dla licealistów 3

Laboratorium kryptograficzne dla licealistów 3

Laboratorium kryptograficzne dla gimnazjalistów 3

Nazwa implementacji: Nauka języka Python wyrażenia warunkowe. Autor: Piotr Fiorek. Opis implementacji: Poznanie wyrażeń warunkowych if elif - else.

4. Funkcje. Przykłady

Programowanie w języku Python. Grażyna Koba

Laboratorium kryptograficzne dla licealistów 5

Naukę zaczynamy od poznania interpretera. Interpreter uruchamiamy z konsoli poleceniem

7. Pętle for. Przykłady

3. Instrukcje warunkowe

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Zadanie 4.3. (0 5) Błąd bezwzględny przybliżonej wartości liczby pi, wyznaczonej z n punktów, definiujemy następująco:

ZADANIE 1 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z D

Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA

Zadanie 1. Zmiana systemów. Zadanie 2. Szyfr Cezara. Zadanie 3. Czy liczba jest doskonała. Zadanie 4. Rozkład liczby na czynniki pierwsze Zadanie 5.

Python jest interpreterem poleceń. Mamy dwie możliwości wydawania owych poleceń:

Zapis algorytmów: schematy blokowe i pseudokod 1

Funkcje są prawdopodobnie najważniejszą częścią każdego poważnego programu (w każdym języku programowania).

Programowanie w języku C++ Grażyna Koba

Nazwa implementacji: Nauka języka Python pętla for. Autor: Piotr Fiorek

Liczby losowe i pętla while w języku Python

1 Podstawy c++ w pigułce.

Warunki logiczne instrukcja if

Warsztaty dla nauczycieli

2. Zmienne i stałe. Przykłady Napisz program, który wypisze na ekran wynik dzielenia 281 i 117 w postaci liczby mieszanej (tj. 2 47/117).

Lekcja 6: Pascal. Procedura i funkcja

kryptografię (z gr. κρυπτός oraz γράφω gráfo pisać ), czyli gałąź wiedzy o utajnianiu wiadomości;

1 Podstawy c++ w pigułce.

while(wyrażenie) instrukcja

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,

Programowanie w Baltie klasa VII

Podstawowe typy zmiennych

Informatyka II. Laboratorium Aplikacja okienkowa

Liga zadaniowa - Informatyka. Zad 1. (Python lub Logomocja)

lekcja 8a Gry komputerowe MasterMind

6. Pętle while. Przykłady

Zestaw 2 Organizacja plików: Oddajemy tylko źródła programów (pliki o rozszerzeniach.cpp)!!!

Wykresy i interfejsy użytkownika

Instalacja i obsługa aplikacji MAC Diagnoza EW

ŁAMIEMY SZYFR CEZARA. 1. Wstęp. 2. Szyfr Cezara w szkole. Informatyka w Edukacji, XV UMK Toruń, 2018

Kryptografia systemy z kluczem tajnym. Kryptografia systemy z kluczem tajnym

Przedstawię teraz tzw. podstawowe symbole wyrażenia regularne (BRE, Basic Regular Expression)

Laboratorium kryptograficzne dla licealistów 6

W przeciwnym wypadku wykonaj instrukcję z bloku drugiego. Ćwiczenie 1 utworzyć program dzielący przez siebie dwie liczby

Podstawy Programowania Podstawowa składnia języka C++

for (inicjacja_warunkow_poczatkowych(końcowych); wyrazenie_warunkowe; wyrazenie_zwiekszajace(zmniejszające)) { blok instrukcji; }

PROGRAMOWANIE W PYTHONIE OD PIERWSZYCH KROKÓW

Języki formalne i automaty Ćwiczenia 6

Wstęp do Informatyki dla bioinformatyków

Struktura pliku projektu Console Application

Informatyka- wykład. Podstawy programowania w Pythonie. dr Marcin Ziółkowski

Podstawy pracy z edytorem tekstu. na przykładzie Open Office

I. Podstawy języka C powtórka

Języki programowania zasady ich tworzenia

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.


Szyfr ten w odróżnieniu od prostych szyfrów różni się tym że literę zastępuje się obrazkiem, a nie inną literą.

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych

Zmienne powłoki. Wywołanie wartości następuje poprzez umieszczenie przed nazwą zmiennej znaku dolara ($ZMIENNA), np. ZMIENNA=wartosc.

Pytania dla języka Python

Laboratorium programistyczne: wprowadzenie do programowania w Pythonie

Programowanie w Turbo Pascal

for (inicjacja_warunkow_poczatkowych; wyrazenie_warunkowe; wyrazenie_zwiekszajace) { blok instrukcji; }

Pytanie 1. Pytanie 2. Pytanie 3. Przyporządkuj rozszerzenie nazwy pliku z jego poprawnym opisem: WOJEWÓDZKI KONKURS INFORMATYCZNY.

Szyfrowanie wiadomości

1. Wypisywanie danych

(mniejszych od 10 9 ) podanych przez użytkownika, wypisze komunikat TAK, jeśli są to liczby bliźniacze i NIE, w przeciwnym przypadku.

Instrukcje sterujące. wer. 11 z drobnymi modyfikacjami! Wojciech Myszka :53:

Instalacja i obsługa aplikacji MAC Diagnoza EP w celu wykonania Arkusza obserwacji

Wstęp. Opis programu :

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

Instrukcje sterujące

Python wstęp. Michał Bereta

Wstęp do Programowania, laboratorium 02

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab

Lekcja 3: Pierwsze kroki z Pythonem. Pętle

Instrukcje wyboru. Tworzenie programu, Schematy blokowe, Instrukcje wyboru, Operatory logiczne

Podstawy Programowania C++

Przedmiotowy Konkurs Informatyczny LOGIA powołany przez Mazowieckiego Kuratora Oświaty

przedmiot kilka razy, wystarczy kliknąć przycisk Wyczaruj ostatni,

Instalacja i obsługa aplikacji MAC Diagnoza EP w celu wykonania Diagnozy rozszerzonej

Iteracje. Algorytm z iteracją to taki, w którym trzeba wielokrotnie powtarzać instrukcję, aby warunek został spełniony.

Podstawy programowania 2. Temat: Funkcje i procedury rekurencyjne. Przygotował: mgr inż. Tomasz Michno

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Pętla for. Matematyka dla ciekawych świata -19- Scilab. for i=1:10... end. for k=4:-1:1... end. k=3 k=4. k=1. k=2

Skrypty powłoki Skrypty Najcz ciej u ywane polecenia w skryptach:

Zestaw 1-1 Organizacja plików: Oddajemy tylko źródła programów (pliki o rozszerzeniach.cpp)!!!

Algorytmika i programowanie

Pomorski Czarodziej 2016 Zadania. Kategoria C

if (wyrażenie ) instrukcja

Instrukcje wyboru. Tworzenie programu, Schematy blokowe, Instrukcje wyboru, Operatory logiczne

Ćwiczenie: JavaScript Cookies (3x45 minut)

Transkrypt:

Laboratorium kryptograficzne dla licealistów 2 Projekt Matematyka dla ciekawych świata Łukasz Mazurek 30.03.2017 1 Szyfr Cezara Uwaga We wszystkich zadaniach dotyczących szyfrowania (o ile nie powiedziano inaczej) zajmujemy się słowami składającymi się wyłącznie z wielkich liter 32-literowego polskiego alfabetu (AĄBCĆDEĘFGHIJ- KLŁMNŃOÓPRSŚTUWYZŹŻ). Szyfr Cezara polega na zastąpieniu każdej litery tekstu jawnego literą występującą w alfabecie o 3 pozycje później literę A szyfrujemy jako C, Ą szyfrujemy jako Ć, itd. Gdy skończy nam się alfabet, zaczynamy liczyć od początku literę Z szyfrujemy jako A, Ź jako Ą, a Ż jako B. Czyli szyfrogramem dla tekstu jawnego CEZAR jest słowo EGACT, a szyfrogram DCÓCÓ po odszyfrowaniu daje tekst jawny BANAN. Zadanie 1 Odszyfruj przy użyciu kartki i długopisu (nie wspomagając się komputerem) tekst jawny, który po zaszyfrowaniu szyfrem Cezara daje szyfrogram ŚŻAC. 1.1 Funkcja translate Szyfr Cezara jest przykładem tzw. szyfru podstawieniowego: każda litera alfabetu jest szyfrowana na inną literę alfabetu zgodnie z pewną regułą. Reguła ta może być np. następującej postaci: A X B Y C Z Taka reguła oznacza, że każda litera A przechodzi na X, każda litera B przechodzi na Y, a każda litera C przechodzi na Z. Regułę taką możemy krócej zapisać w postaci: ABC XY Z Zgodnie z powyższą regułą, słowo BABA po zaszyfrowaniu przejdzie na YXYX. Bardzo przydatną funkcją do szyfrowania podstawieniowego jest funkcja translate w Pythonie. Aby z niej skorzystać, należy najpierw poleceniem str.maketrans stworzyć regułę, według której będziemy szyfrować: 1

> regula = s t r. maketrans ( ABC, XYZ ) Stworzona powyżej reguła oznacza, że przy szyfrowaniu litera A przejdzie na X, B na Y, natomiast C przejdzie na Z. Mając taką regułę, możemy zaszyfrować dowolne słowo przy użyciu polecenia translate: > BABA. translate ( regula ) => YXYX Zwróć uwagę na składnię polecenia translate: najpierw podaje się słowo do zaszyfrowania, następnie po kropce występuje słowo translate, a na końcu w nawiasie okrągłym podaje się regułę, według której chcemy zaszyfrować. Zadanie 2 Korzystając z poleceń str.maketrans i translate zaszyfruj szyfrem Cezara słowo: UZGŹHLFĆAFC Pamiętaj, że używamy 32-literowego polskiego alfabetu: AĄBCĆDEĘFGHIJKLŁMNŃOÓPRSŚTUWY- ZŹŻ, a szyfr Cezara zastępuję każdą literę alfabetu literą występującą o 3 pozycje później w alfabecie. 1.2 Szyfr Cezara z kluczem k W oryginalnym szyfrze Cezara następowało przesunięcie o 3 pozycje w alfabecie. Możemy zajmować się również szyfrem Cezara z kluczem k, w którym szyfrogram otrzymuje się przesuwając każdą literę tekstu o k pozycji w alfabecie. Np. dla k = 5 szyfr przeprowadza A na D, Ą na E, itd. Aby zmodyfikować nasz program do szyfrowania dowolnym kluczem, musimy mieć metodę do automatycznego generowania alfabetu przesuniętego o k pozycji w lewo. Np. dla k = 5 chcielibyśmy wygenerować alfabet przesunięty o 5 pozycji w lewo: DEĘFGHIJKLŁMNŃOÓPRSŚTUWYZŹŻAĄBCĆ Jednak to zadanie rozwiązaliśmy już na poprzednich zajęciach! Takie przesunięcie nosi nazwę rotacji słowa i możemy je wygenerować sklejając z sobą: oraz podsłowo powstałe przez usunięcie pierwszych pięciu liter podsłowo złożone z tych pięciu pierwszych liter: > alfabet [5:] + alfabet [:5] = > DEĘFGHIJKLŁMNŃOÓPRSŚTUWYZŹŻAĄBCĆ 1.3 Tworzenie własnych funkcji Wszystkie programy, które do tej pory pisaliśmy można podzielić na dwa rodzaje: ciąg jednolinijkowych poleceń, które wpisujemy bezpośrednio w konsoli Pythona (prawe, czarne okienko na stronie repl.it), pętle, które wygodniej pisać w pliku z kodem źródłowym (lewym, białym okienku na stronie repl. it), gdyż składają się z kilku linijek Często będziemy chcieli wielokrotnie wykorzystać raz napisany fragment kodu. W tym celu będziemy tworzyć własne funkcje. Definicja funkcji ma następującą postać: 2

def < nazwa_funkcji >( < argumenty >): < pierwsze_polecenie > < drugie_polecenie >... Zwróć uwagę na podobieństwa definicji funkcji do pętli for: pierwsza linijka kończy się dwukropkiem, każda z kolejnych linijek jest wcięta względem pierwszej linijki. Jako że definicje funkcji składają się zawsze z co najmniej kilku linijek, będziemy je pisać (podobnie jak pętle for) w lewym okienku interpretera (w pliku z kodem źródłowym). Przykład Napiszmy funkcję, która wypisuje swój argument podniesiony do kwadratu: def kwadrat (x): print (x * x) > kwadrat (7) 49 > kwadrat (2 + 3) 25 Spróbuj przepisać definicję funkcji kwadrat do lewego okienko interpretera repl.it i nacisnąć przycisk run. Jeśli wszystko się powiedzie, od tej pory będziesz mógł wywoływać funkcję kwadrat, pisząc w prawym okienku kwadrat(argument), podając dowolną liczbę (lub wyrażenie) jako argument. Polecenia, takie jak wywołanie funkcji, możemy również zapisywać w lewym okienku, poniżej definicji tej funkcji. Wówczas, po naciśnięciu przycisku run, w prawym okienku zobaczymy efekt działania tych poleceń: def dodaj (a, b): print (a + b) dodaj (7, 8) dodaj ( pies, kot ) f o r liczba in [10, 20, 30]: dodaj ( liczba, 1) 15 pieskot 11 21 31 Zadanie 3 Napisz funkcję cezar(slowo, klucz), która wypisze slowo zaszyfrowane szyfrem Cezara o kluczu klucz. Np. słowo BANAN zaszyfrowane szyfrem Cezara o kluczu 2 brzmi ĆBOBO, więc wywołanie funkcji cezar w tym przypadku powinno wyglądać następująco: > cezar ( BANAN, 2) ĆBOBO 2 Instrukcja warunkowa if Często chcemy, aby program zachowywał się w różny sposób w zależności od tego, czy jakiś warunek jest spełniony, czy nie. W Pythonie (jak w większości języków programowania) służy do tego instrukcja warunkowa if. Przypuśćmy, że chcemy napisać funkcję czy_parzysta(liczba), która sprawdza, czy liczba jest parzysta, czy nie i wypisuje odpowiedni komunikat. Aby sprawdzić, czy liczba jest parzysta, możemy sprawdzić, czy reszta z dzielenia jej przez 2 jest równa 0. Zatem kod funkcji czy_parzysta będzie wyglądał następująco: 3

def czy_parzysta ( liczba ): i f liczba % 2 == 0: print (" Parzysta ") e l s e : print (" Nieparzysta ") Zwróć uwagę na następujące rzeczy: if to po polsku jeśli, else to po polsku w przeciwnym przypadku. Linijki rozpoczynające się od if i else (podobnie jak linijki rozpoczynające się od for lub def) kończą się dwukropkiem. Wnętrze if -a i else-a (linijki 3 i 5) jest wcięte (podobnie jak wnętrze for-a lub def-a). Linijka 3 zostanie wykonana, jeśli spełniony będzie warunek z linijki 2, czyli jeśli reszta z dzielenia liczby przez 2 będzie równa 0. Linijka 5 zostanie wykonana, jeśli warunek z linijki 2 nie będzie spełniony, czyli jeśli reszta z dzielenia liczby przez 2 nie będzie równa 0. W powyższym przykładzie użyliśmy konstrukcji if /else do rozróżnienia pomiędzy dwoma przypadkami. Używając komendy elif (skrót od else if) możemy stworzyć bardziej skomplikowany kod do rozróżnienia pomiędzy kilkoma różnymi przypadkami: for c in Analfabetyzm : i f c == A or c == a : print ( A lub a ) e l i f c in xyz : print ( x-z ) e l s e : print ( ) A lub a A lub a A lub a x-z x-z Ten kod składa się z trzech bloków, które są wykonywane w zależności od spełnienia poszczególnych warunków: if, elif, else. Mamy dużą dowolność w konstruowaniu tego typu fragmentów kodu: bloków elif może być dowolnie wiele, blok else może występować jako ostatni blok, ale może też go nie być w ogóle. W powyższym przykładzie widzimy również, jak można łączyć warunki spójnikiem and ( i ) oraz or ( lub ) Pierwsze połączenie oznacza, że chcemy, aby spełnione były wszystkie z wymienionych warunków, a drugie, że chcemy aby spełniony był co najmniej jeden z wymienionych warunków. Zwróć uwagę na środkowy warunek. Ma on postać if A in B:. Taki warunek sprawdza, czy słowo A jest podsłowem (czyli zawiera się w całości wewnątrz) słowa B. W naszym przykładzie sprawdzaliśmy, czy litera będąca wartością zmiennej c zawiera się wewnątrz słowa xyz, czyli czy jest jedną z liter: x, y lub z. Zadanie 4 Napisz funkcję wyiksuj(napis), która wypisze dany napis, zastępując każdą małą literę polskiego alfabetu małą literą x i każdą wielką literę polskiego alfabetu wielką literą X, natomiast resztę znaków pozostawi bez zmian. Np. dla napisu FC Barcelona - Real Madryt 3:2 program powinien wypisać: > wyiksuj ( FC Barcelona - Real Madryt 3:2 ) XX Xxxxxxxxx - Xxxx Xxxxxx 3:2 Wskazówka: Dla każdego znaku użyj konstrukcji if / elif /else, aby rozróżnić pomiędzy trzema przypadkami: małe litery, wielkie litery, pozostałe znaki (podobnie jak w pętli przechodzącej po słowie Analfabetyzm ). 4

3 Zadania dodatkowe Zadanie 5 Pewne słowo zostało zaszyfrowane szyfrem Cezara o kluczu 21 i uzyskano słowo MYŹCFM- FUPEN. Jakie to było słowo? Spróbuj rozwiązać to zadanie nie tworząc nowej funkcji do odszyfrowywania, a jedynie używając funkcji cezar. Zadanie 6 Korzystając z poleceń str.maketrans i translate, napisz funkcję powieksz(slowo), która dla danego słowa slowo składającego się z małych lub wielkich liter polskiego alfabetu, wypisze je ze wszystkimi literami zamienionymi na wielkie. Np. dla słowa McGonagall funkcja powinna zwrócić słowo MCGONAGALL: > powieksz ( McGonagall ) MCGONAGALL Zadanie 7 Napisz funkcję bezwzgledne(lista), która dla danej listy liczb wypiszę listę wartości bezwględnych tych liczb, tj. liczby ujemne zamieni na przeciwne, a liczby nieujemne pozostawi bez zmian. Poszczególne liczby powinny być oddzielone pojedynczymi spacjami. Przykładowe użycie funkcji powinno wyglądać następująco: > bezwzgledne ([5, -10, 15, 0]) 5 10 15 0 Zadanie 8 Rozważmy szyfr podstawieniowy według następującej reguły: AĄBCĆDEĘFGHIJKLŁMNŃOÓPRSŚTUWYZŹŻ SĆTGLOAPNEJBFHŁZIRÓUĄKĘŃŹŻDYMWCŚ W tym szyfrze A przechodzi na S, Ą przechodzi na Ć, B na T, itd. Pewne polskie słowo s 0 zostało zaszyfrowane tym szyfrem i otrzymano szyfrogram s 1. Następnie słowo s 1 zostało ponownie zaszyfrowane tym samym szyfrem i otrzymano szyfrogram s 2. Następnie zaszyfrowano s 2, aby otrzymać s 3, itd. Łącznie procedurę szyfrowania powtórzono n razy i otrzymano słowo ÓŚZKŃTĆLHMALÓOYE Jakie było początkowe słowo s 0 i ile razy było zaszyfrowane? 5

4 Praca domowa nr 2 Rozwiązania zadań domowych należy przesłać do czwartku 6 kwietnia do godz. 16 59 na adres licealisci. pracownia@icm.edu.pl wpisując jako temat wiadomości Lx PD2, gdzie x to numer grupy, np. L3 PD2 dla grupy L3, itd. Zadanie domowe 1 (1 pkt) Pewne polskie słowo zostało zaszyfrowane szyfrem Cezara z pewnym kluczem i w wyniku otrzymano szyfrogram ZWEŚŃHĆÓUBĘŚŃK. Przy użyciu pętli for i funkcji cezar spróbuj rozszyfrować szyfrogram wszystkimi 31 możliwymi kluczami i znajdź słowo, które zostało zaszyfrowane. Zadanie domowe 2 (2 pkt) Napisz funkcję szyfruj_liste(lista), która wypisze listę słów zaszyfrowaną w następujący sposób: każde słowo będzie zaszyfrowane szyfrem Cezara o kluczu równym długości tego słowa. Np. lista [ ALA, MA, KOTA ] powinna zostać zaszyfrowana do [ CNC, ŃB, NSZĆ ] (pierwsze słowo jest zaszyfrowane szyfrem Cezara o kluczu 3, drugie o kluczu 2, a trzecie o kluczu 4). Poszczególne słowa powinny zostać wypisane w oddzielnych wierszach. Przykładowe użycie funkcji powinno wyglądać następująco: > szyfruj_liste ([ ALA, MA, KOTA ) CNC ŃB NSZĆ Zadanie domowe 3 (3 pkt) Napisz funkcję szyfruj_napis(napis, klucz), która dla danego napisu składającego się z małych i wielkich liter polskiego alfabetu oraz ze spacji, cyfr i znaków specjalnych, wypisze ten napis zaszyfrowany w następujący sposób: każda mała lub wielka litera alfabetu zostanie zaszyfrowana szyfrem Cezara z kluczem klucz. Każdy inny znak (spacje, cyfry, znaki specjalne) zostanie wypisany w niezmienionej postaci. Przykładowe użycie funkcji powinno wyglądać następująco: > szyfruj_napis ( Polska - Włosi 8:8, 4) Tsńwnć - Żoswł 8:8 6