Laboratorium kryptograficzne dla gimnazjalistów 3

Podobne dokumenty
Laboratorium kryptograficzne dla licealistów 3

Laboratorium kryptograficzne dla licealistów 3

Laboratorium kryptograficzne dla licealistów 4

Laboratorium kryptograficzne dla gimnazjalistów 1

Laboratorium kryptograficzne dla licealistów 1

Laboratorium kryptograficzne dla licealistów 2

Laboratorium kryptograficzne dla licealistów 1

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

Laboratorium kryptograficzne dla licealistów 5

Programowanie w języku Python. Grażyna Koba

lekcja 8a Gry komputerowe MasterMind

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

Technologie Informacyjne - Linux 2

Wstęp do Informatyki i Programowania Laboratorium: Lista 1 Środowisko programowania

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

Podstawy i języki programowania

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

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

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

Wstęp do systemu Linux

Instrukcja użytkownika systemu medycznego

Pomorski Czarodziej 2016 Zadania. Kategoria C

CalendarGenerator v0.1 - instrukcja obsługi

Laboratorium kryptograficzne dla licealistów 6

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

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

Rys. 1. Widok uruchomienia polecenia apt-get install build-essential. Rys. 2. Widok uruchomienia polecenia apt-get install apache2

Lekcja 10. Uprawnienia. Dołączanie plików przy pomocy funkcji include() Sprawdzanie, czy plik istnieje przy pmocy funkcji file_exists()

INSTRUKCJA INSTALACJI ORAZ UŻYTKOWANIA PROGRAMU FORMULARZ OFERTOWY

Certyfikat Certum Basic ID. Instrukcja dla użytkowników Windows Vista. wersja 1.3 UNIZETO TECHNOLOGIES SA

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

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.

Utworzenie pliku. Dowiesz się:

Memeo Instant Backup Podręcznik Szybkiego Startu

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Laboratorium. Szyfrowanie algorytmami Vernam a oraz Vigenere a z wykorzystaniem systemu zaimplementowanego w układzie

Programowanie aplikacji mobilnych

Zakład Systemów Rozproszonych

Algorytmika i programowanie

Instrukcja połączenia z programem Compas LAN i import konfiguracji

Jak utworzyć diagram

Tematy lekcji informatyki klasa 4a luty/marzec 2013

SYSTEMY OPERACYJNE ĆWICZENIE POLECENIA SYSTEMU MSDOS

1. Wprowadzenie do oprogramowania gretl. Wprowadzanie danych.

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

INŻYNIERIA BEZPIECZEŃSTWA LABORATORIUM NR 2 ALGORYTM XOR ŁAMANIE ALGORYTMU XOR

7. Pętle for. Przykłady

CZĘŚĆ A PIERWSZE KROKI Z KOMPUTEREM

Zastanawiałeś się może, dlaczego Twój współpracownik,

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

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

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.

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

Podstawowe komendy. Ćwiczenie 1

1. Wybierz polecenie rysowania linii, np. poprzez kliknięcie ikony W wierszu poleceń pojawi się pytanie o punkt początkowy rysowanej linii:

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

Warsztaty dla nauczycieli

Instrukcja instalacji i konfiguracji czytników kart kryptograficznych, aplikacji procertum CardManager, obsługa aplikacji procertum CardManager w

Instalacja aplikacji komunikacyjnej modułu pl.id

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

Generator CABRILLO program Marka SP7DQR (Instrukcja obsługi)

Zespół Szkół Technicznych w Suwałkach. Pracownia Systemów Komputerowych. Ćwiczenie Nr 15 PRACA W TRYBIE MS-DOS. Opracował Sławomir Zieliński

Instrukcja. importu dokumentów. z programu Fakt do programu Płatnik. oraz. przesyłania danych do ZUS. przy pomocy programu Płatnik

WOJEWÓDZTWO PODKARPACKIE

Import pliku MPW do systemu plusbank24

Instrukcja generowania certyfikatu PFRON i podpisywania dokumentów aplikacji SODiR w technologii JS/PKCS 12

Program współpracuje z : Windows XP, Powerdraft 2004, v8, XM, Microstation 2004, v8, XM.

Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA

Windows XP Wiersz polecenia

Ćwiczenie: JavaScript Cookies (3x45 minut)

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

TEMAT : System operacyjny MS DOS pliki wsadowe

Podstawy MATLABA, cd.

Włączanie/wyłączanie paska menu

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

Dodawanie stron do zakładek

Technologie informacyjne lab. 4

Przewodnik Szybki start

Wstęp do systemów wielozadaniowych laboratorium 14 Środowisko i aliasy

1. Wypisywanie danych

Zajęcia nr 1 Podstawy programowania. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Podstawy Programowania.

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

program TRX

Trochę o plikach wsadowych (Windows)

PROGRAMOWANIE GRAFIKI I ELEMENTÓW INTERAKTYWNYCH NA STRONY WWW W P5.JS

Lekcja 3: Pierwsze kroki z Pythonem. Pętle

Instalowanie VHOPE i plików biblioteki VHOPE

Python wstęp. Michał Bereta

Polcode Code Contest PHP-10.09

Zarządzanie projektami informatycznymi

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

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

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

ZAJĘCIA NR 1. Zawartość

Moduł Handlowo-Magazynowy Przeprowadzanie inwentaryzacji z użyciem kolektorów danych

Zadanie 9. Projektowanie stron dokumentu

Transkrypt:

Laboratorium kryptograficzne dla gimnazjalistów 3 Projekt Matematyka dla ciekawych świata Łukasz Mazurek 21.04.2016 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. Dlatego na dzisiejszych zajęciach nie będziemy już korzystać z online owego interpretera Pythona repl.it programy będziemy uruchamiać poleceniem python3 dostępnym na komputerach w laboratoriach. Aby skorzystać z tego samego polecenia na Waszych komputerach domowych, wystarczy, że zainstalujecie interpreter Pythona dostępny za darmo do pobrania ze strony https://www.python.org/downloads/ (zwróćcie uwagę, aby zainstalować wersję o numerze rozpoczynającym się od 3). Aby rozpocząć pracę z naszym plikiem, otwórz terminal, stwórz w katalogu domowym podkatalog krypto i wejdź do tego katalogu poleceniami mkdir krypto cd krypto Następnie otwórz edytor tekstu (np. Kate), stwórz w nim pusty plik i zapisz w naszym katalogu krypto pod nazwą program.py. Na koniec zapisz plik szyfr.txt pobrany ze strony ciekawi.icm.edu.pl (zakładka Dla uczestników Materiały - ćwiczenia) również w tym samym katalogu. W tym momencie katalog krypto powinien zawierać dwa pliki: program.py i szyfr.txt. Aby się o tym przekonać, możesz użyć polecenia ls, które wypisuje zawartość katalogu, w którym się aktualnie znajdujemy: $ ls program.py szyfr. txt Teraz zmień zawartość pliku program.py na następującą: tekst = plik. readline () print ( tekst ) Aby uruchomić napisany właśnie program, wpisz w konsoli polecenie python3 program.py i naciśnij Enter. Program powinien wypisać pierwszy wiersz pliku szyfr.txt. Co się stało? Polecenie z pierwszej linijki otwiera plik szyfr.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 pierwszy wiersz z pliku szyfr.txt i zapisuje go w zmiennej tekst. Ostatnie polecenie wypisuje zawartość zmiennej tekst. 1

Napiszemy teraz program, który zlicza liczbę liter A występujących w pliku szyfr.txt tekst = plik. read () ile_a = 0 for znak in tekst : i f znak == A : ile_a = ile_a + 1 print ( ile_a ) W powyższym kodzie: Wczytujemy całą zawartość pliku poleceniem plik.read() i zapisujemy w zmiennej tekst. Zmienna ile_a (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_a o jeden. Zadanie 1 Napisz program, który policzy, ile wielkich liter alfabetu łacińskiego występuje łącznie w pliku szyfr.txt. 2 Zliczanie częstości występowania wszystkich liter alfabetu Aby zliczyć wystąpienia litery A, potrzebowaliśmy zmiennej ile_a. Aby zliczyć wystąpienia każdej z 26 liter alfabetu z osobna, potrzebujemy 26 zmiennych. Możemy to jednak zrobić wygodniej, korzystając z 26-elementowej listy wypełnionej początkowo zerami: tekst = plik. read () ile = [0] * 26 for znak in tekst : i f ord( znak ) >= ord( A ) and ord( znak ) <= ord( Z ): poz = ord( znak ) - ord( A ) ile [ poz ] = ile [ poz ] + 1 print ( ile ) W powyższym kodzie: Napis [0] * 26 tworzy listę [0, 0,..., 0] składającą się z 26 zer. Listę tę zapisujemy następnie w zmiennej ile. Dla każdego znaku z tekstu sprawdzamy, czy to wielka litera i jeśli tak, to obliczamy jej pozycję w alfabecie i zapisujemy w zmiennej poz. Zwiększamy wartość na pozycji poz w liście ile, czyli wartość zliczającą liczbę wystąpień znaku znak. Po wykonaniu powyższego kodu w zmiennej ile znajduje się 26-elementowa lista zawierająca liczby wystąpień kolejnych liter alfabetu. Dane te najwygodniej jest przedstawić w formie wykresu. 2

3 Wizualizacja listy w formie wykresu Do rysowania wykresów w Pythonie służą polecenia plot i show. Aby zwizualizować zawartość listy ile na wykresie, dopisz na końcu programu tworzącego tę listę linijki: plot ( ile ) W powyższym kodzie: Pierwsza linijka mówi, że chcemy umieścić na wykresie serię danych z listy ile. Druga linijka sprawia, że kolejne wartości na osi X będą podpisane literami A, B, C,..., Z zamiast liczbami 0, 1,..., 25. Trzecia linijka to polecenie wyświetlenia wykresu na ekranie komputera. Niektóre komendy, których użyliśmy pochodzą spoza zbioru podstawowych komend Pythona. Dlatego na początku programu musimy je najpierw zaimportować z odpowiednich bibliotek. W tym celu musimy dopisać na początku programu linijki: from pylab import plot, show, xticks from string import ascii_uppercase W pierwszej linijce importujemy polecenia plot, show i xticks z biblioteki pylab, a w drugiej z biblioteki string importujemy stałą ascii_uppercase, która zawiera listę składającą się z kolejnych wielkich liter alfabetu łacińskiego. Ostatecznie, nasz program powinien wyglądać następująco: from pylab import plot, show, xticks from string import ascii_uppercase tekst = plik. read () ile = [0] * 26 for znak in tekst : i f ord( znak ) >= ord( A ) and ord( znak ) <= ord( Z ): poz = ord( znak ) - ord( A ) ile [ poz ] = ile [ poz ] + 1 plot ( ile ) Po zapisaniu treści tego programu w pliku program.py i uruchomieniu go w konsoli poleceniem python3 program.py na ekranie powinien wyświetlić się wykres taki jak na rys. 1. Jeśli zamiast wykresu Python wypisze komunikat o błędzie związanym z kodowaniem UTF-8, niezbędne może okazać się uprzednie wykonanie w konsoli poleceń: export LC_ALL = pl_pl.utf -8 export LANG = pl_pl.utf -8 Służę one poprawnemu skonfigurowaniu bibliotek z których korzystamy z naszym kodowaniem znaków UTF-8. 3

Rysunek 1: Wykres częstości występowania poszczególnych liter w szyfrogramie 4 Porównanie wykresu z częstościami występowania liter w języku polskim W pliku czestosci_pl.txt (dostępnym do pobrania ze strony ciekawi.icm.edu.pl, zakładka Dla uczestników Materiały - ćwiczenia) znajduje się 26-elementowa lista częstości występowania poszczególnych liter w języku polskim. Dla uproszczenia zajmujemy się tutaj bezogonkową wersją polskiego alfabetu kolejne wartości na tej liście odpowiadają kolejnym literom alfabetu ABCDEFGHIJKLMNOPQRSTU- VWXYZ. W kodzie naszego programu stwórz zmienną czestosci i zapisz do niej listę z pliku czestosci_pl.txt, a następnie narysuj wykres przedstawiający tę listę: czestosci = [0.099, 0.0147, 0.0436, 0.0325, 0.0877, 0.003, 0.0142, 0.0108, 0.0821, 0.0228, 0.0351, 0.0392, 0.028, 0.0572, 0.086, 0.0313, 0, 0.0469, 0.0498, 0.0398, 0.025, 0, 0.0465, 0, 0.0376, 0.0653] plot ( czestosci ) Powinieneś uzyskać wykres taki jak na rys. 2. Rysunek 2: Wykres częstości występowania poszczególnych liter w języku polskim 4

Spróbujmy teraz umieścić oba wykresy na jednym rysunku. W tym celu należy dwa razy wykonać polecenie plot, oddzielnie dla każdej listy: plot ( czestosci ) plot ( ile ) Okaże się, że jeden z wykresów jest całkowicie niewidoczny. Dzieje się tak, ponieważ elementy listy czestosci nie przekraczają wartości 0.1, natomiast elementy listy ile sięgają liczby 1500. Dlatego wykres listy czestosci jest na tyle niski w porównaniu do wykresu listy ile, że praktycznie w całości pokrywa się z linią na poziomie 0. Zadanie 2 Przeskaluj listę ile, tak aby jej elementy odpowiadały względnym częstościom występowania poszczególnych liter w szyfrogramie. W tym celu policz liczbę wystąpień wszystkich wielkich liter alfabetu w szyfrogramie, a następnie podziel każdy element listy przez tę liczbę. Narysuj ponownie wykresy listy ile (przeksalowanej) i listy czestosci na jednym rysunku. Tym razem wykresy powinny być podobnej wysokości. 5 Przesuwanie wykresu Jeśli poprawnie rozwiązałeś poprzednie zadanie, powinieneś otrzymać dwa wykresy o podobnej wysokości, jednak poszczególne górki i dołki powinny występować w różnych miejscach. W rzeczywistości tekst z pliku szyfr.txt został zaszyfrowany szyfrem Cezara, więc lista ile powinna odpowiadać cyklicznemu przesunięciu listy czestosci. W Pythonie możemy w łatwy sposób przesunąć cyklicznie listę. Aby np. przesunąć cyklicznie listę o 3 pozycje w lewo możemy użyć konstrukcji: lista [3:] + lista [:3] Pierwsze wyrażenie zwraca fragment listy od elementu o indeksie 3 (włącznie) do końca, a drugie wyrażenie zwraca fragment listy od początku do elementu o indeksie 3 (wyłącznie). Znak dodawania pomiędzy wyrażeniami oznacza, że oba fragmenty zostają sklejone w jedną listę. Zadanie 3 Wiedząc, że szyfrogram z pliku szyfr.txt powstał przez zaszyfrowanie szyfrem Cezara pewnego tekstu napisanego w języku polskim, znajdź klucz, którym tekst został zaszyfrowany. W tym celu znajdź takie przesunięcie, żeby przesunięty wykres częstości występowania liter w szyfrogramie pokrywał się z wykresem częstości występowania liter w języku polskim. Dodatkowo, możesz sprawdzić, że odnalazłeś właściwy klucz odszyfrowując tekst szyfrogramu metodami poznanymi na poprzednich zajęciach. Wskazówka: w języku polskim nie występują litery Q, V i X. 6 Praca domowa nr 3 Rozwiązania zadań należy przesłać do czwartku 28 kwietnia do godz. 15 59 na adres gimnazjalisci. pracownia@icm.edu.pl wpisując jako temat wiadomości Gx PD3, gdzie x to numer grupy, np. G3 PD3 dla grupy G3, itd. We wszystkich zadaniach będziemy korzystać z pliku vig5.txt (dostępny do pobrania ze strony ciekawi.icm.edu.pl, zakładka Dla uczestników Materiały - ćwiczenia). Zadanie domowe 1 Napisz program, który wczyta tekst z pliku vig5.txt 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 vig5.txt wygląda tak: AAY IRNLMY OO DHUOJIPSEE AIPMIF WKT MTOSKKLV H AYKZIVE ARKI DKWOPTE. Zatem Twój program powinien wypisać: AR HPAF KHZADT... 5

Zadanie domowe 2 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 vig5.txt). Wiedząc, że wykres ten odpowiada przesuniętemu wykresowi częstości występowania liter w naszym języku (lista czestosci), znajdź to przesunięcie. Zadanie domowe 3 Plik vig5.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. 6