Laboratorium kryptograficzne dla licealistów 3

Podobne dokumenty
Laboratorium kryptograficzne dla gimnazjalistów 3

Laboratorium kryptograficzne dla licealistów 3

Laboratorium kryptograficzne dla licealistów 4

Laboratorium kryptograficzne dla licealistów 1

Laboratorium kryptograficzne dla licealistów 2

Laboratorium kryptograficzne dla licealistów 5

Laboratorium kryptograficzne dla gimnazjalistów 1

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.

Programowanie w języku Python. Grażyna Koba

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

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

lekcja 8a Gry komputerowe MasterMind

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

Technologie Informacyjne - Linux 2

Laboratorium kryptograficzne dla licealistów 6

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

Pomorski Czarodziej 2016 Zadania. Kategoria C

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 pracy z edytorem tekstu. na przykładzie Open Office

CalendarGenerator v0.1 - instrukcja obsługi

Wstęp do systemu Linux

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

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

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

INSTRUKCJA INSTALACJI ORAZ UŻYTKOWANIA PROGRAMU FORMULARZ OFERTOWY

Podstawy i języki programowania

Instrukcja użytkownika systemu medycznego

Memeo Instant Backup Podręcznik Szybkiego Startu

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

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

Podstawowe komendy. Ćwiczenie 1

Zakład Systemów Rozproszonych

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

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

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.

Algorytmika i programowanie

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

Tematy lekcji informatyki klasa 4a luty/marzec 2013

SYSTEMY OPERACYJNE ĆWICZENIE POLECENIA SYSTEMU MSDOS

1. Wprowadzenie do oprogramowania gretl. Wprowadzanie danych.

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

Utworzenie pliku. Dowiesz się:

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

7. Pętle for. Przykłady

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

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

Warsztaty dla nauczycieli

Programowanie aplikacji mobilnych

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

Jak utworzyć diagram

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

WOJEWÓDZTWO PODKARPACKIE

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

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

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

CZĘŚĆ A PIERWSZE KROKI Z KOMPUTEREM

Windows XP Wiersz polecenia

Ćwiczenie: JavaScript Cookies (3x45 minut)

UŻYTKOWNIK. APLIKACJE UŻYTKOWE (wszelkie programy zawarte domyślnie w systemie operacyjnym jak i samodzielnie zainstalowane przez użytkownika systemu)

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

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

Dodawanie stron do zakładek

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

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.

Technologie informacyjne lab. 4

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

1. Wypisywanie danych

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

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

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

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

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

Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA

Instalacja aplikacji komunikacyjnej modułu pl.id

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

Laboratorium - Praca z poleceniami wiersza poleceń w systemie Windows

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

Zadanie 9. Projektowanie stron dokumentu

Przedrostkowa i przyrostkowa inkrementacja i dekrementacja

System operacyjny UNIX Ćwiczenie 1. Podstawowe polecenia systemu Unix

1 Przygotował: mgr inż. Maciej Lasota

Ćwiczenie 5 Menu programu

Przekierowanie wejścia wyjścia:

Główne elementy zestawu komputerowego

Operatory zmiany sposobu przypisania standardowych strumieni >,<,>> Jeżeli pierwsze polecenie powiodło się to wykona drugie

Płace Optivum. Jakie czynności musi wykonać pracownik, aby otrzymywać drogą elektroniczną paski z list płac?

Sieci Komputerowe 2 / Ćwiczenia 1

Trochę o plikach wsadowych (Windows)

Instalacja i obsługa aplikacji MAC Diagnoza EW

Sieci i systemy operacyjne I Ćwiczenie 1. Podstawowe polecenia systemu Unix

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

Transkrypt:

Laboratorium kryptograficzne dla licealistów 3 Projekt Matematyka dla ciekawych świata Łukasz Mazurek 19.05.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, uruchom Linuxa, 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. Gedit), stwórz w nim pusty plik i zapisz w naszym katalogu krypto pod nazwą program.py. Na koniec zapisz plik tekst.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 tekst.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 tekst. 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 tekst.txt. Co się stało? Polecenie z pierwszej linijki otwiera plik tekst.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 tekst.txt i zapisuje go w zmiennej tekst. Ostatnie polecenie wypisuje zawartość zmiennej tekst. Napiszemy teraz program, który zlicza liczbę liter A występujących w całym pliku tekst.txt ile_a = 0 1

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. Zauważ, że plik.readline() zmieniło się w plik.read(). 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 polskiego alfabetu występuje łącznie w pliku tekst.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 32 liter alfabetu z osobna, potrzebujemy 32 zmiennych. Możemy to jednak zrobić wygodniej, korzystając z 32-elementowej listy wypełnionej początkowo zerami: duzyalf = AĄBCĆDEĘFGHIJKLŁMNŃOÓPRSŚTUWYZŹŻ ile = [0] * 32 for znak in tekst : i f znak in duzyalf : poz = duzyalf. index ( znak ) ile [ poz ] = ile [ poz ] + 1 print ( ile ) 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 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ę 32-elementowa lista zawierająca liczby wystąpień kolejnych liter alfabetu. Dane te najwygodniej jest przedstawić w formie wykresu. 3 Wizualizacja listy w formie wykresu Do rysowania wykresów w Pythonie służą polecenia plot i show. Komendy te 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 linijkę: from pylab import plot, show, xticks 2

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,..., Ż zamiast liczbami 0, 1,..., 31. Trzecia linijka to polecenie wyświetlenia wykresu na ekranie komputera. Ostatecznie, nasz program powinien wyglądać następująco: from pylab import plot, show, xticks duzyalf = AĄBCĆDEĘFGHIJKLŁMNŃOÓPRSŚTUWYZŹŻ ile = [0] * 32 for znak in tekst : i f znak in duzyalf : poz = duzyalf. index ( znak ) 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. Rysunek 1: Wykres częstości występowania poszczególnych liter w szyfrogramie 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ń: 3

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. 4 Porównanie wykresu z częstościami występowania liter w języku polskim W pliku jezyk_pl.txt (dostępnym do pobrania ze strony ciekawi.icm.edu.pl, zakładka Dla uczestników Materiały - ćwiczenia) znajduje się 32-elementowa lista częstości występowania poszczególnych liter w języku polskim kolejne wartości na tej liście odpowiadają częstości występowania kolejnych liter alfabetu AĄBCĆDEĘFGHIJKLŁMNŃOÓPRSŚTUWYZŹŻ w naszym języku. W kodzie naszego programu stwórz zmienną jezyk i zapisz do niej listę z pliku jezyk_pl.txt, a następnie narysuj wykres przedstawiający tę listę. Końcówka pliku program.py powinna teraz wyglądać tak: jezyk = [0.0891, 0.0099, 0.0147, 0.0396, 0.004, 0.0325, 0.0766, 0.0111, 0.003, 0.0142, 0.0108, 0.0821, 0.0228, 0.0351, 0.021, 0.0182, 0.028, 0.0552, 0.002, 0.0775, 0.0085, 0.0313, 0.0469, 0.0432, 0.0066, 0.0398, 0.025, 0.0465, 0.0376, 0.0564, 0.0006, 0.0083] plot ( jezyk ) Po uruchomieniu programu poleceniem python3 program.py powinieneś uzyskać wykres taki jak na rys. 2. Rysunek 2: Wykres częstości występowania poszczególnych liter w języku polskim 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, a następnie raz wykonać polecenia xticks() i show(). Zatem cały plik program.py powinien teraz wyglądać następująco: from pylab import plot, show, xticks duzyalf = AĄBCĆDEĘFGHIJKLŁMNŃOÓPRSŚTUWYZŹŻ 4

ile = [0] * 32 for znak in tekst : i f znak in duzyalf : poz = duzyalf. index ( znak ) ile [ poz ] = ile [ poz ] + 1 jezyk = [0.0891, 0.0099, 0.0147, 0.0396, 0.004, 0.0325, 0.0766, 0.0111, 0.003, 0.0142, 0.0108, 0.0821, 0.0228, 0.0351, 0.021, 0.0182, 0.028, 0.0552, 0.002, 0.0775, 0.0085, 0.0313, 0.0469, 0.0432, 0.0066, 0.0398, 0.025, 0.0465, 0.0376, 0.0564, 0.0006, 0.0083] plot ( jezyk ) plot ( ile ) Okaże się, że jeden z wykresów jest całkowicie niewidoczny. Dzieje się tak, ponieważ elementy listy jezyk nie przekraczają wartości 0.1, natomiast elementy listy ile sięgają liczby 1500. Dlatego wykres listy jezyk 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 jezyk 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 tekst.txt został zaszyfrowany szyfrem Cezara, więc lista ile powinna odpowiadać cyklicznemu przesunięciu listy jezyk. 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 tekst.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. 6 Praca domowa nr 3 Rozwiązania zadań należy przesłać do czwartku 26 maja 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. 5

We wszystkich zadaniach będziemy korzystać z pliku szyfrogram.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 szyfrogram.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 szyfrogram.txt wygląda tak: CAŻ ISNLMY OO DGUOHIÓSĘĘ CIPMIF YKT MTOSIKLY G CAKĄIWĘ CRIG DKYOPTE. Zatem Twój program powinien wypisać: CS GÓCF IGĄCDT... 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 szyfrogram.txt). Wiedząc, że wykres ten odpowiada przesuniętemu wykresowi częstości występowania liter w naszym języku (lista jezyk), znajdź to przesunięcie. Zadanie domowe 3 Plik szyfrogram.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