Laboratorium kryptograficzne dla licealistów 3

Podobne dokumenty
Laboratorium kryptograficzne dla licealistów 3

Laboratorium kryptograficzne dla licealistów 4

Laboratorium kryptograficzne dla gimnazjalistów 3

Laboratorium kryptograficzne dla licealistów 5

Laboratorium kryptograficzne dla licealistów 2

Laboratorium kryptograficzne dla licealistów 1

Laboratorium kryptograficzne dla gimnazjalistów 1

Laboratorium kryptograficzne dla licealistów 1

Programowanie w języku Python. Grażyna Koba

Maple i wykresy. 1.1 Najpierw należy się zalogować. Jak to zrobić zostało opisane w moim poprzednim tutorialu.

Krótki kurs obsługi środowiska programistycznego Turbo Pascal z 12 Opracował Jan T. Biernat. Wstęp

Pomorski Czarodziej 2016 Zadania. Kategoria C

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 8a Gry komputerowe MasterMind

Sieci Komputerowe 2 / Ćwiczenia 1

Laboratorium kryptograficzne dla licealistów 6

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

Qtiplot. dr Magdalena Posiadała-Zezula

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

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.

Szybka instrukcja tworzenia testów dla E-SPRAWDZIAN-2 programem e_kreator_2

INSTRUKCJA OTWIERANIA PLIKU DPT (data point table)

Maskowanie i selekcja

1. Wprowadzenie do oprogramowania gretl. Wprowadzanie danych.

1. ZMIANA NA JĘZYK POLSKI

Zakład Systemów Rozproszonych

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

Baltie 3. Podręcznik do nauki programowania dla klas I III gimnazjum. Tadeusz Sołtys, Bohumír Soukup

Nawigacja po długim dokumencie może być męcząca, dlatego warto poznać następujące skróty klawiszowe

Instrukcja korzystania ze skryptu kroswalidacja.py

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

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Instalacja i obsługa aplikacji MAC Diagnoza EW

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

Spis treści Szybki start... 4 Podstawowe informacje opis okien... 6 Tworzenie, zapisywanie oraz otwieranie pliku... 23

INSTRUKCJA EDYCJI PROFILU OSOBOWEGO W SERWISIE

7. Pętle for. Przykłady

Pomorski Czarodziej 2016 Zadania. Kategoria B

Grażyna Koba. Grafika komputerowa. materiały dodatkowe do podręcznika. Informatyka dla gimnazjum

Autor: Opis implementacji: Zaawansowane użytkowanie Linuksa, podstawowe informacje o bezpieczeństwie danych i szyfrowaniu. A B C D E F G H I J

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Instalowanie VHOPE i plików biblioteki VHOPE

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem.

PODRĘCZNIK UŻYTKOWNIKA PEŁNA KSIĘGOWOŚĆ. Płatności

Laboratorium nr 1 Szyfrowanie i kontrola integralności

Edytor tekstu OpenOffice Writer Podstawy

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

Podstawy i języki programowania

Zajęcia 4 procedury i funkcje

Zawartość. Wstęp. Moduł Rozbiórki. Wstęp Instalacja Konfiguracja Uruchomienie i praca z raportem... 6

Ćwiczenie: JavaScript Cookies (3x45 minut)

Praca i energia Mechanika: praca i energia, zasada zachowania energii; GLX plik: work energy

Argumenty wywołania programu, operacje na plikach

Jak napisać program obliczający pola powierzchni różnych figur płaskich?

Testowanie I. Celem zajęć jest zapoznanie studentów z podstawami testowania ze szczególnym uwzględnieniem testowania jednostkowego.

Podręcznik użytkownika. Instrukcje

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

Instrukcja użytkownika systemu medycznego

Laboratorium - Narzędzie linii uruchamiania w systemie Windows Vista

Utworzenie aplikacji mobilnej Po uruchomieniu Visual Studio pokazuje się ekran powitalny. Po lewej stronie odnośniki do otworzenia lub stworzenia

PRÓBNY EGZAMIN MATURALNY Z INFORMATYKI STYCZEŃ Arkusz I. Czas pracy: 60 minut Liczba punktów do uzyskania: 15

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

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

edycja szablonu za pomocą serwisu allegro.pl

Podstawy MATLABA, cd.

Baltie - programowanie

Ćwiczenie 5 Menu programu

Wstęp 5 Rozdział 1. Instalacja systemu 13. Rozdział 2. Logowanie i wylogowywanie 21 Rozdział 3. Pulpit i foldery 25. Rozdział 4.

Papyrus. Papyrus. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

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

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

DOKUMENTY I GRAFIKI. Zarządzanie zawartością Tworzenie folderu Dodawanie dokumentu / grafiki Wersje plików... 7

Zastosowanie zmiennej globalnej do sterowania animacją interaktywną. Flash MX 2004

Tak przygotowane pliki należy umieścić w głównym folderze naszego programu. Klub IKS

Warsztaty dla nauczycieli

3. Instrukcje warunkowe

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

Technologie Informacyjne - Linux 2

Cwiczenie nr 1 Pierwszy program w języku C na mikrokontroler AVR

Aplikacje WWW - laboratorium

Instrukcja wypełniania formularza Ankieta Trwałości

Kapela rockowa. Wstęp. Scratch. Wykonując ten projekt nauczysz się jak zaprogramować własne instrumenty muzyczne! Zadania do wykonania

Cykl lekcji informatyki w klasie IV szkoły podstawowej. Wstęp

UMOWY INSTRUKCJA STANOWISKOWA

Podstawowe komendy. Ćwiczenie 1

D:\DYDAKTYKA\ZAI_BIS\_Ćwiczenia_wzorce\04\04_poprawiony.doc 2009-lis-23, 17:44

Operacje na gotowych projektach.

BIBLIOGRAFIA W WORD 2007

Współpraca FDS z arkuszem kalkulacyjnym

Dodawanie stron do zakładek

5. Kliknij teraz na ten prostokąt. Powinieneś w jego miejsce otrzymać napis. Jednocześnie została wywołana kolejna pozycja menu.

Ćwiczenie 4. Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1.

INSTRUKCJA INSTALACJI I OBSŁUGI GPG4Win

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

Instrukcja dla użytkowników Windows Vista Certyfikat Certum Basic ID

Transkrypt:

Laboratorium kryptograficzne dla licealistów 3 Projekt Matematyka dla ciekawych świata Łukasz Mazurek 06.04.2017 1 Wczytywanie danych z pliku Do tej pory wszystkie dane, z których korzystały nasze programy, wprowadzaliśmy bezpośrednio do kodu programu. Tym razem spróbujemy rozszyfrować dłuższą wiadomość zapisaną w pliku. 1.1 Pierwszy program powiększacz liter Napiszemy program, który wczytuje tekst z pliku, powiększa go (zamienia wszystkie małe litery na wielkie) i zapisuje w innym pliku. Do tego zadania będziemy potrzebowali oddzielnego pliku z tekstem do obróbki. W tym celu otwórz stronę repl.it i kliknij przycisk Add new file w lewym górnym rogu strony. Pojawi się informacja o przejściu do trybu Project Mode i aktualnie edytowanemu plikowi zostanie nadana nazwa main.py. Utwórz nowy plik, klikając ponownie przycisk Add new file i nadaj nowo powstałemu plikowi nazwę tekst1.txt. Następnie otwórz plik tekst1.txt ze strony ciekawi.icm.edu.pl (zakładka Dla uczestników Materiały - ćwiczenia Lab 3.) i skopiuj całą jego treść do naszego pliku tekst1.txt na stronie repl.it. Teraz zmień zawartość pliku main.py na następującą: tekst1 = plik. read () print ( tekst1 ) i uruchom program przyciskiem run. Program powinien wypisać zawartość pliku tekst1.txt do prawej konsoli. Co się stało? Polecenie z pierwszej linijki otwiera plik tekst1.txt i zapewnia dostęp do niego poprzez zmienną plik. Opcja r oznacza, że plik jest otwarty do odczytu (od angielskiego read). Druga komenda czyta zawartość pliku tekst1.txt i zapisuje go w zmiennej tekst1. Trzecia komenda zamyka dostęp do pliku tekst1.txt. Ostatnie polecenie wypisuje na ekran zawartość zmiennej tekst1. Do zamiany liter małych na wielkie w Pythonie służy polecenie upper(). Aby w tekście zapisanym w zmiennej napis zmienić wszystkie litery małe na wielkie (a wielkie litery i pozostałe znaki pozostawić niezmienione) należy użyć konstrukcji napis.upper(). Zmodyfikujmy zatem nasz program tak, żeby zmienna tekst1 zawierała zawartość pliku tekst1.txt powiększoną przy użyciu polecenia upper(): print ( tekst1 ) 1

Tym razem program powinien wypisać na ekran tekst składający się wyłącznie z wielkich liter i znaków niebędących literami. Chcielibyśmy, aby tekst wygenerowany przez nasz program nie wyświetlał się w konsoli, tylko był zapisywany do nowego pliku tekst1big.txt. W tym celu musimy utworzyć nowy plik przy użyciu open z parametrem w (od angielskiego write) i użyć polecenia write. Ostatecznie nasz program powinien wyglądać następująco: plik = open( tekst1big. txt, w ) plik. write ( tekst1 ) Po wykonaniu powyższego programu na liście otwartych plików powinien pojawić się nowy plik o nazwie tekst1big.txt zawierający tekst z pliku tekst1.txt z małymi literami zamienionymi na wielkie. 1.2 Zliczanie wystąpień liter w tekście Napiszemy teraz funkcję zlicz(tekst), która zlicza liczbę liter A występujących w pliku tekst1.txt. Ponieważ wielkość liter chwilowo nie ma dla nas znaczenia, w tym zadaniu (jak i w kolejnych dotyczących zliczania liter) zawsze będziemy najpierw powiększać wszystkie litery wczytywanego pliku. Stwórz program o następującej treści: ile = 0 i f znak == A : ile = ile + 1 ile = zlicz ( tekst1 ) print ( ile ) Powyższy kod składa się z definicji funkcji zlicz(tekst) oraz z czterech linijek uruchamiających tę funkcję na tekście z pliku tekst1.txt 1. W funkcji zlicz(tekst): Zmienna ile (początkowo równa 0) przechowuje aktualną liczbę zliczonych liter A. Za każdym razem, gdy trafimy w tekście na kolejną literę A, zwiększamy wartość zmiennej ile o jeden. Na koniec zwracamy wartość zmiennej ile jako wynik funkcji zlicz(tekst) przy użyciu instrukcji. W dalszej części kodu: Wczytujemy całą zawartość pliku tekst1.txt, powiększamy i zapisujemy w zmiennej tekst1. 1 Zwróć uwagę, że w powyższym kodzie występują dwie różne zmienne o tej samej nazwie ile: pierwsza wewnątrz definicji funkcji zlicz (zmienna lokalna), a druga na zewnątrz tej definicji (zmienna globalna). Na zewnątrz definicji funkcji nie możemy po prostu użyć zmiennej zadeklarowanej wewnątrz niej, ponieważ nie jest ona tam widoczna. Natomiast nazwanie dwóch zmiennych tak samo nie jest problemem. W takim przypadku na podstawie kontekstu Python zawsze wie, o którą zmienną chodzi. 2

Uruchamiamy funkcję zlicz na wczytanym tekście i zapisujemy wynik jej działania w zmiennej ile Wypisujemy wartość zmiennej ile Uruchom powyższy program, naciskając przycisk run. Jeśli się nie pomyliłeś, program powinien wypisać liczbę liter A występujących w pliku tekst1.txt. Zadanie 1 Zmodyfikuj program tak, aby policzył, ile liter polskiego alfabetu (tj. AĄBCĆDEĘFGHIJ- KLŁMNŃOÓPRSŚTUWYZŹŻ) występuje łącznie w pliku tekst1.txt. Wskazówka: przy użyciu instrukcji in można sprawdzać, czy dana litera występuje wewnątrz danego słowa: > N in WYSZUKIWANIE True > M in WYSZUKIWANIE False 1.3 Zliczanie częstości występowania poszczególnych liter alfabetu Aby zliczyć wystąpienia litery A, potrzebowaliśmy zmiennej ile, w której odnotowywaliśmy kolejne wystąpienia tej litery. Używając tej samej metody, moglibyśmy zliczyć wystąpienia każdej z 32 liter alfabetu z osobna, przy użyciu 32 zmiennych. Możemy to jednak zrobić wygodniej, korzystając z jednej 32-elementowej listy: alfabet = AĄBCĆDEĘFGHIJKLŁMNŃOÓPRSŚTUWYZŹŻ ile = [0] * 32 i f znak in alfabet : poz = alfabet. index ( znak ) ile [ poz ] = ile [ poz ] + 1 W powyższym kodzie: Napis [0] * 32 tworzy listę [0, 0,..., 0] składającą się z 32 zer. Listę tę zapisujemy następnie w zmiennej ile. Dla każdego znaku z tekstu sprawdzamy, czy to litera. Jeśli tak, to obliczamy jej pozycję w alfabecie (przy użyciu instrukcji index) i zapisujemy otrzymaną pozycję w zmiennej poz. W liście ile zwiększamy wartość na pozycji poz, czyli wartość zliczającą liczbę wystąpień znaku znak. Po wykonaniu powyższego kodu w zmiennej ile powinna znajdować się 32-elementowa lista zawierająca liczby wystąpień kolejnych liter alfabetu. Czyli na pierwszej pozycji powinna tam się znaleźć liczba liter A, na drugiej pozycji liczba liter Ą, itd. Aby sprawdzić, czy tak dzieje się naprawdę, zmodyfikuj program do następującej postaci: alfabet = AĄBCĆDEĘFGHIJKLŁMNŃOÓPRSŚTUWYZŹŻ ile = [0] * 32 i f znak in alfabet : 3

poz = alfabet. index ( znak ) ile [ poz ] = ile [ poz ] + 1 ile = zlicz ( tekst1 ) print ( ile ) Następnie uruchom ten program, klikająć przycisk run. Program powinien wypisać 32-elementową listę liczb oznaczających liczbę wystąpień kolejnych liter alfabetu w pliku tekst1.txt. 2 Wizualizacja listy w formie wykresu W poprzednim rozdziale udało nam się otrzymać listę liczby wystąpień poszczególnych liter alfabetu w tekście. Jak wiemy, takie zliczanie liter jest elementem analizy częstościowej techniki łamania szyfrów tekstowych. Aby przeanalizować obliczone częstości, wygodnie jest jest przedstawić obliczoną listę w formie wykresu. Do rysowania wykresów w Pythonie służy pakiet pyplot. Aby go używać, na początku programu musimy go zaimportować i wybrać odpowiedni tryb poleceniami: import matplotlib as mpl mpl. use ( Agg ) import matplotlib. pyplot as plt Teraz możemy już stworzyć wykres kolejnych wartości listy ile przy użyciu polecenia: plt. plot ( ile ) Aby oś była podpisana literami, możemy dodać: plt. xticks (range (32), alfabet ) Na koniec, musimy zapisać wykres w pliku graficznym: plt. savefig ( tekst1. png ) Ostatecznie, nasz program do rysowania wykresu częstości występowania liter w tekście powinien wyglądać następująco: import matplotlib as mpl mpl. use ( Agg ) import matplotlib. pyplot as plt alfabet = AĄBCĆDEĘFGHIJKLŁMNŃOÓPRSŚTUWYZŹŻ ile = [0] * 32 i f znak in alfabet : poz = alfabet. index ( znak ) ile [ poz ] = ile [ poz ] + 1 4

Rysunek 1: Wykres częstości występowania poszczególnych liter w tekście tekst1.txt ile = zlicz ( tekst1 ) plt. plot ( ile ) plt. xticks (range (32), alfabet ) plt. savefig ( tekst1. png ) Po uruchomieniu powyższego kodu, po kilku sekundach w projekcie powinien pojawić się nowy plik o nazwie tekst1.png zawierający obrazek, taki jak na rys. 1. 2.1 Porównanie wykresu z częstościami występowania liter w języku polskim Stwórz w swoim projekcie nowy plik o nazwie lalka.txt i skopiuj do niego zawartość pliku lalka.txt ze strony ciekawi.icm.edu.pl (zakładka Dla uczestników Materiały - ćwiczenia). W pliku tym znajduje się fragment powieści Lalka Bolesława Prusa. Jest to fragment na tyle długi, że częstości występowania poszczególnych liter alfabetu w tym fragmencie dość dobrze odpowiadają średnim częstościom występowania poszczególnych liter w naszym języku. Zadanie 2 Przy użyciu napisanego wcześniej programu naszkicuj wykres częstości występowania poszczególnych liter we fragmencie lalka.txt i zapisz go w pliku lalka.png. Zadanie 3 Plik tekst1.txt powstał przez zaszyfrowanie pewnego tekstu napisanego w języku polskim. Porównaj wykres tekst1.png z wykresem lalka.png: wypisz 4 najczęściej i 4 najrzadziej występujące litery w obu tekstach. Czy na podstawie powyższej analizy częstościowej potrafisz wskazać szyfr, którego użyto? 3 Zadania dodatkowe Zadanie 4 Narysuj oba wykresy (dla pliku tekst1.txt i dla pliku lalka.txt) na jednym rysunku. W tym celu należy dwa razy obliczyć odpowiednią listę częstości, a następnie dwa razy wykonać polecenie plt.plot(), oddzielnie dla każdej listy. Polecenia plt.xticks() i plt.savefig() wystarczy wykonać raz. 5

Zadanie 5 Jeśli poprawnie rozwiążesz poprzednie zadanie, okaże się, że jeden z wykresów jest dużo niższy niż drugi. Dzieje się tak, ponieważ jeden tekst jest dłuższy od drugiego, więc w jednym tekście jest więcej poszczególnych liter niż w drugim. Zmodyfikuj funkcję zlicz, tak aby zliczała ona względne częstości występowania poszczególnych liter, tj. dla każdej litery ma zliczyć liczbę wystąpień tej litery podzieloną przez łączną liczbę wystąpień wszystkich liter. Narysuj wykresy względnych częstości wystąpień liter w tekstach tekst1.txt i lalka.txt na jednym rysunku. Teraz oba wykresy powinny być podobnej wysokości. Zadanie 6 Rozszyfruj tekst z pliku tekst1.txt. Narysuj wykres względnych częstości występowania poszczególnych liter w tym rozszyfrowanym tekście oraz w pliku lalka.txt na jednym rysunku. Wykresy powinny się mniej więcej pokrywać. 4 Praca domowa nr 3 Rozwiązania zadań należy przesłać do czwartku 20 kwietnia do godz. 16 59 na adres licealisci.pracownia@ icm.edu.pl wpisując jako temat wiadomości Lx PD3, gdzie x to numer grupy, np. L3 PD3 dla grupy L3, itd. We wszystkich zadaniach będziemy korzystać z pliku tekst2.txt (dostępny do pobrania ze strony ciekawi.icm.edu.pl, zakładka Dla uczestników Materiały - ćwiczenia). Zadanie domowe 1 (1 pkt) Napisz program, który wczyta tekst z pliku tekst2.txt, zamieni wszystkie litery na wielkie i wypisze na ekran co piąty znak tego tekstu, począwszy od pierwszego (liczymy wszystkie znaki, również spacje i znaki interpunkcyjne). Dla przykładu, początek pliku tekst2.txt wygląda tak: Hgrłjńtźb eeół iee 1652. Jjprńwd pnć ggfoćp, pąż jłrcł; mćcp jayp fłmnbgpbp Ńgkuo... Zatem Twój program powinien wypisać: HŃEI6JWĆOPŁ B O... Zadanie domowe 2 (2 pkt) Narysuj wykres częstości występowania poszczególnych liter w tekście będącym wynikiem zadania 1 (czyli w co piątym znaku pliku tekst2.txt). Wiedząc, że wykres ten odpowiada przesuniętemu wykresowi częstości występowania liter w naszym języku, znajdź to przesunięcie. Wskazówka: jako wzorzec częstości występowania poszczególnych liter w naszym języku użyj częstości obliczonych dla pliku lalka.txt. Zadanie domowe 3 (3 pkt) Plik tekst2.txt powstał w wyniku zaszyfrowania pewnego tekstu napisanego w języku polskim szyfrem Vigenere a z pewnym pięcioliterowym kluczem. Znajdź ten klucz, a następnie rozszyfruj tekst. Wskazówka: szyfr Vigenere a z pięcioliterowym kluczem możemy traktować jak 5 szyfrów Cezara z 5 różnymi kluczami. W zadaniu 2 odkryliśmy pierwszą literę klucza znalezione przesunięcie to indeks w alfabecie tej litery. Aby znaleźć drugą literę klucza, przeprowadź analogiczną procedurę dla co piątej litery tekstu począwszy od drugiej, itd. Aby uzyskać 3 punkty za to zadanie, wielkość liter w rozszyfrowanym tekście powinna się pokrywać z oryginałem. Za rozwiązanie, które wypisuje rozszyfrowany tekst składający się z samych wielkich liter można uzyskać maksymalnie 2 punkty. 6