Övning 6. Komprimering, kryptering, dokumentering & testning

Relevanta dokument
Övning 6 - Tillämpad datalogi 2012

Föreläsning 17 - Komprimering

MA2047 Algebra och diskret matematik

DD1320 Tillämpad datalogi. Lösning (skiss) till tenta 20 okt 2011

Tildatenta Lösningsskiss

RSA-kryptering och primalitetstest

Programmeringsuppgifter 1

Grupper och RSA-kryptering

Några satser ur talteorin

NÅGOT OM KRYPTERING. Kapitel 1

Grundläggande datalogi - Övning 9

Optimala koder. Det existerar förstås flera koder som har samma kodordsmedellängd. Enklaste fallet är att bara byta 0:or mot 1:or.

Optimala koder. Övre gräns för optimala koder. Gränser. Övre gräns för optimala koder, forts.

Skolan för Datavetenskap och kommunikation PROGRAMMERINGSTEKNIK FÖRELÄSNING 18

Föreläsning 9: Talteori

Algebra och kryptografi Facit till udda uppgifter

Avbildningar och hashtabeller. Koffman & Wolfgang kapitel 7, mestadels avsnitt 2 4

σ 1 = (531)(64782), τ 1 = (18)(27)(36)(45), τ 1 σ 1 = (423871)(56).

Fredag 10 juni 2016 kl 8 12

Sats 2.1 (Kinesiska restsatsen) Låt n och m vara relativt prima heltal samt a och b två godtyckliga heltal. Då har ekvationssystemet

Tentamen i Algoritmer & Datastrukturer i Java

Krypteringsprogrammet Kryptogamen

Föreläsning 5 Programmeringsteknik DD1310. Modulen doctest. Exempel. Doctest Dictionary Filhantering

Laboration: Whitebox- och blackboxtesting

Datastrukturer i kursen. Föreläsning 8 Innehåll. Träd rekursiv definition. Träd

Tenta i Grundläggande programmering DD klockan

Grundläggande datalogi - Övning 4

DD1320 Tillämpad datalogi. Lösnings-skiss till tentamen

HI1024 Programmering, grundkurs TEN

IX Diskret matematik

Efternamn förnamn pnr programkod

Föreläsning 9 Innehåll

Uppgifter till tenta i 729G04 Programmering och diskret matematik. 17 december 2015, kl 14:00-18:00

Algoritmer, datastrukturer och komplexitet

BINÄRA TRÄD. (X = pekarvärdet NULL): struct int_bt_node *pivot, *ny; X X X 12 X X 12 X X -3 X X

Idag: Centrerad utskrift. Granskning. DD1311 Programmeringsteknik med PBL. Granskning Felhantering GUI. Föreläsning 15.

Skolan för Datavetenskap och kommunikation PROGRAMMERINGSTEKNIK FÖRELÄSNING 15

Offentlig kryptering

MMA132: Laboration 2 Matriser i MATLAB

Kurslitteraturen. C-nivå Villkorssatser [kap 8] if & elif & else and & or Loopar [kap 9] for

Datalogi för E Övning 3

Inlämningsuppgiften. Föreläsning 9 Innehåll. Träd. Datastrukturer i kursen

RSA-kryptografi för gymnasiet. Jonas Gustafsson & Isac Olofsson

Algebra och Diskret Matematik A (svenska)

Algoritmer, datastrukturer och komplexitet

Hemligheternas Matematik

Kryptering. Krypteringsmetoder

DD1314 Programmeringsteknik

Övning 2. (Länkade) Listor, noder

C++ Lektion Tecken och teckenfält

Grundläggande kryptering & chiffer

DEL I. Matematiska Institutionen KTH

Algoritmer, datastrukturer och komplexitet

Nämnarens kryptoskola fördjupning. Enkel transposition

Automatateori (2) Idag: Sammanhangsfria språk. Dessa kan uttryckas med Grammatik PDA

Kryptering. Av: Johan Westerlund Kurs: Utveckling av webbapplicationer Termin: VT2015 Lärare: Per Sahlin

TDDI16: Datastrukturer och algoritmer

Tentamen i Grundläggande Programvaruutveckling, TDA548

Byggmästarkrypto lärarsida

1/15/2013. DD1310/DD1314/DA3009 Programmeringsteknik. Lärandemål... Vilka läser kursen? ...fler lärandemål VARFÖR? Föreläsning 1

Kryptering HEMLIG SKRIFT SUBSTITUTION STEGANOGRAFI KRYPTOGRAFI

Ordbokskodning. Enkel variant av kodning med variabelt antal insymboler och fixlängds kodord. (Jfr tunstallkodning)

Exempel, minnesfri binär källa. Ordbokskodning. Lempel-Zivkodning. Lempel-Zivkodning, forts.

Kravspecifikation Fredrik Berntsson Version 1.1

Tentamen i Introduktion till programmering

Innehåll. Föreläsning 12. Binärt sökträd. Binära sökträd. Flervägs sökträd. Balanserade binära sökträd. Sökträd Sökning. Sökning och Sökträd

Tentamen i Grundläggande Programvaruutveckling, TDA548

Grundfrågor för kryptosystem

Lösningar för tenta i TMV200 Diskret matematik kl. 14:00 18:00

Föreläsning 7: Syntaxanalys

Datorteknik TSIU02 Lab 2 Morsesändare v0.7

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Tentamen TMV210/MMGD10 Inledande Diskret Matematik, D1/GU

Länkade listor, stackar och köer

Skurlängdskodning. aaaabbbbbbbccbbbbaaaa. Man beskriver alltså sekvensen med ett annat alfabet än det ursprungliga.

Föreläsning Datastrukturer (DAT037)

Krypteringteknologier. Sidorna ( ) i boken

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING. Övningstentamen 1

Föreläsning 9: Talteori

Föreläsning 5 Mer om funktioner, villkor

SCB :-0. Uno Holmer, Chalmers, höger 2 Ex. Induktiv definition av lista. // Basfall

DD1321, Tentamen i tillämpad programmering och datalogi Lördagen den 18 dexember 2010 kl 13 18

MS-A0409 Grundkurs i diskret matematik Sammanfattning, del II

Tentamen, Algoritmer och datastrukturer

Ordlistor, filhantering och ut på webben. Linda Mannila

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

Algoritmer, datastrukturer och komplexitet

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

TDP Regler

DD1310/DD1314/DA3009 Programmeringsteknik LÄRANDEMÅL... Vilka läser kursen? ...FLER LÄRANDEMÅL. Föreläsning 1

Algoritmer, datastrukturer och komplexitet

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata.

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

OBJEKTORIENTERAD PROGRAMVARUUTVECKLING

Datastrukturer. föreläsning 6. Maps 1

IS/IT-tjänst privata vårdgivare

Inledning. Vad är ett datorprogram, egentligen? Olika språk. Problemlösning och algoritmer. 1DV433 Strukturerad programmering med C Mats Loock

Protokollbeskrivning av OKI

256bit Security AB Offentligt dokument

Acer edatasecurity Management

Transkript:

Per Sedholm DD1320 (tilda11) 2011-10-05 1. Smittskydd Övning 6 Komprimering, kryptering, dokumentering & testning Du har fått ett mail som innehåller tips mot spridning av virus. Informationen är komprimerad med ett Huffmanträd där nollor motsvarar vänster och ettor motsvarar höger (se figur, T kodas t.ex. som 11) Vad står det i meddelandet 010101011000110011001111? 0 1 00 01 10 T 11 D 000 V 001 H 010 N 011 Ä 100 A 101 010 101 011 000 11 001 100 11 11 H A N D T V Ä T T 2. Huffman för Havamal man är mans gamman kan man läsa i Havamal. Konstruera en huffmankod för tecknen i detta uttryck (rita trädet) och skriv sedan upp det i kodad form. Bokstav m a n ä r s g Frekvens 4 4 3 3 1 1 1 1 Trädet växer fram som: m 4 a 4 m 4 a 4 m 4 a 4 1

m 4 a 4 sgär 4 n 6 m 4 a 4 sgär 4 asgär 8 n 6 m 4 a 4 sgär 4 n m 10 asgär 8 n 6 m 4 a 4 sgär 4 18 0 n m 10 1 asgär 8 00 n 6 01 m 4 10 a 4 11 sgär 4 000 n 3 001 3 110 111 1100 s 1 1101 g 1 1110 ä 1 1111 r 1 2

Med vänster 0, höger 1 får vi Bokstav n m a s g ä r Kod 000 001 01 10 1100 1101 1110 1111 Koden för man är mans gamman blir m a n _ ä r _ m a n s _ g a m m a n 01 10 000 001 1110 1111 001 01 10 000 1100 001 1101 10 01 01 10 000 01100000 01111011 11001011 00001100 00111011 00101100 00 8 16 24 32 40 48 (50 bitar) En alternativ lösning (se hemsida) ger koden Bokstav ä r s g n m a Kod 0000 0001 0010 0011 010 011 01 11 10 11 010 011 0000 0001 011 10 11 010 0010 011 0011 11 10 10 11 010 10110100 11000000 01011101 10100010 01100111 11010110 10 8 16 24 32 40 48 (50 bitar) 3. Enkel kryptering Kryptera lösenordet SIMSALABIM med 1. rot13 2. Transpositionschiffer 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 N O P Q R S T U V W X Y Z A B C D E F G H I J K L M 1. FVZFNYNOVZ 2. BISALAMIMS (mfl) 4. Testning I labb 6 ska ni göra ett program som kontrollerar syntaxen för en molekylformel. Skriv upp en samling indata att testa programmet med! Giltiga formler Ogiltiga formler Tomma strängen? Både en- och tvåteckens siffror Tänk på att ej korrekta kemiska formler är tillåtna. 3

5. RSA-kryptering (ur kursboken, uppg 2 s. 125) Du vill hålla ditt turnummer (18) hemligt, och har därför bestämt dig för att kryptera det med RSA. Välj två primtal större än 500 och använd dom för att kryptera turnumret. p = 587 q = 719 } n = p q = 422 053 φ(n) = (p 1) (q 1) = 420 748 = 2 2 293 359 e = 17 väljs så att 1 < e < φ, och e och φ är relativt prima, dvs inga faktorer gemensamma, eller gcd(e, φ) = 1. Kryptering P av meddelandet M fås genom P (M) = M e (mod n) P (18) = 18 17 (mod 422 053) = 2.185... 10 21 (mod 422 053) 161 344 (mod 422 053) För att avkryptera chiffertexten C används S(C) = C d (mod n) där d = 222 749 beräknas som modulär multiplikativ invers (modular multiplicative inverse, se nedan), dvs d sådant att d e 1 (mod φ(n)) Här kan se att S(161 344) = 161 344 222 749 (mod 422 053) = 5.405... 10 1 160 021 (mod 422 053) 18 (mod 422 053) Det fungerar även baklänges. För att signera meddelandet C = 18: S(C ) = 18 d (mod n) 197 036 (mod n) P (197 036) = 197 036 e (mod n) 18 (mod n) Paret (e, n) är din allmänna nyckel (public key). Paret (d, n) är din privata nyckel (private key). För att signera, beräkna med privata nyckeln så kan andra verifiera med den allmänna. För att kryptera kan andra beräkna med den allmänna, och du avkryptera med den privata. Vid behov fyller man ut M till önskad bitlängd 4

Modulär multiplikativ invers Antag a = 3. Då är b = 7 dess invers modulo 10: a 1 b (mod 10) a b = 3 7 = 21 1 (mod 10) Istället för att dividera med a kan man då multiplicera med b: Exempel: n a = n a 1 = n b n = 12 12/3 = 4 4 84 = 7 12 (mod 10) n = 15 15/3 = 5 5 35 = 5 7 (mod 10) n = 588 588/3 = 196 6 4116 = 5 7 (mod 10) För att en invers till a ska existera i Z m så måste a och m vara relativt prima. Inversen beräknas med en utökad version av Euklides algoritm. I RSAexemplet ovan är d e = 17 222 749 = 3 786 733 1 (mod 420 748) 5

6. Lempel-Ziv I denna uppgift ska du avkoda ett meddelande som komprimerats med Lempel-Zivs metod. Komprimeringen går till så att komprimeraren lagrar en lista med strängar som från början enbart innehåller tomma strängen. Komprimeraren läser tecken för tecken från intexten den längsta sträng som ligger i strängtabellen. Sedan skrivs index för denna sträng i tabellen ut, följt av nästa tecken i intexten. Strängtabellen utökas med strängen plus nästa tecken. Därefter läses åter tecken för tecken från intexten. Så fort en sträng inte finns i strängtabellen läggs den alltså till. Metoden kan i (icke-optimerad) kod beskrivas så här: def lzw(text): table = Table() q=queue() for c in text: # spara texten tecken för tecken i en kö q.put(c) s="" table.add(s) kodtext="" # här sparas den kodade texten while not q.isempty(): c=q.get() if table.exists(s+c): s=s+c else: kodtext+=str(table.code(s))+c table.add(s+c) s="" if not s=="": kodtext+=str(table.code(s)) return kodtext Klassen Table stöder inläggning av strängar, kontroll av om en sträng finns i tabellen och möjlighet att ta reda på index hos en speciell sträng. Index bestäms av ordningen strängarna lades in i, där den första strängen har index 1. Uppgiften är att avkoda följande text, där alfabetet består av versaler och mellanslag kodat som. 1S1T1O1R2T4C1K1H4L1M2_6O1L3A1_9O14M1A5 Det vill säga: vad är t om print lzw(t) ger ovanstående som utskrift? Ge också en tabell med strängar och index som motsvarar tabellen i koden! index 1 2 3 4 5 6 7 8 9 10 11 12 sträng S T O R ST OC K H OL M S index 13 14 15 16 17 18 19 sträng STO L TA HO LM A 1S1T1O1R2T4C1K1H4L1M2_6O1L3A1_9O14M1A5 S T O R ST OC K H OL M S STO L TA HO LM A R 6