Obligatorisk oppgave 6 i INF1010: Dekryptering

Like dokumenter
Obligatorisk oppgave 1: Regneklynge

Obligatorisk oppgave 4: Lege/Resept

Obligatorisk oppgave 2: Bilhierarki

INF Obligatorisk innlevering 5

2 Om statiske variable/konstanter og statiske metoder.

Argumenter fra kommandolinjen

MAT-INF 1100: Obligatorisk oppgave 1

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

Sudokubrettet Et sudokubrett består av n n ruter. Vi bruker følgende begreper i oppgaven:

Hvordan angripe en større oppgave? (og hva skal jeg gjøre i oblig 7!?)

INF Innleveringsoppgave 6

MAT-INF 1100: Obligatorisk oppgave 1

INF Ekstrainnlevering

Sudokubrettet Et sudokubrett består av n n ruter. Vi bruker følgende begreper i oppgaven:

INF1010 våren januar. Objektorientering i Java

BOKMÅL Side 1 av 7. KONTINUASJONSEKSAMEN I FAG TDT4100 Objektorientert programmering / IT1104 Programmering, videregående kurs

INF2270. Input / Output (I/O)

INF5110 Obligatorisk Oppgave 2 del 2. Andreas Svendsen SINTEF. 23. April Oversikt

MAT-INF 1100: Obligatorisk oppgave 1

INF våren 2017

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Eivind Storm Aarnæs

UNIVERSITETET I OSLO

Velkommen til. INF våren 2016

IN1010 våren januar. Objektorientering i Java

IN1010 våren Repetisjon av tråder. 15. mai 2018

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

Tråder Repetisjon. 9. og 13. mai Tråder

Obligatorisk oppgave 4 i INF1010, våren 2014: "Leger og resepter" Versjon 1.1

Obligatorisk oppgave 5: Labyrint

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000 v2008

Om verktøyet. Installering av MySQL Migration Toolkit. Installer toolkitet. Brukerveiledning til Intelligent Converters MySQL Migration Toolkit

Sudokubrettet Et sudokubrett består av n n ruter. Vi bruker følgende begreper i oppgaven:

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000

Obligatorisk oppgave 1 INF1020 h2005

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

UNIVERSITETET I OSLO

Brukerveiledning for Intelligent Converters MySQL Migration Toolkit IKA Trøndelag IKS 2012

Tell sekunder. Steg 0: Hva er forskjellig fra før? Introduksjon. I denne oppgaven skal vi lage vårt eget spill!

Metoder med parametre, løkker og arrayer

INF Uke 10. Ukesoppgaver oktober 2012

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl

IN1000 Obligatorisk innlevering 7

PG 4200 Algoritmer og datastrukturer Innlevering 2

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000 v2009

IN1010 V19, Obligatorisk oppgave 2

2 Om statiske variable/konstanter og statiske metoder.

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

Innlevering 2b i INF2810, vår 2017

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

Oblig 7 - Råd og tips. Henrik Hillestad Løvold

HØGSKOLEN I SØR-TRØNDELAG

Det viktigste i en moderne datamaskin er hovedkortet («motherboard»):

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000

INF100/INF100-F - INNLEVERING 2 HØSTEN 2005

INF1040 Oppgavesett 14: Kryptering og steganografi

Import av klientfiler er kun mulig fra Akelius Årsavslutning, Akelius Skatt og Akelius Revisjon.

Jentetreff INF1000 Debugging i Java

UNIVERSITETET I OSLO

Innhold. INF1000 Høst Unified Modeling Language (UML) Unified Modeling Language (UML)

En oppsummering (og litt som står igjen)

Oblig 4Hybelhus litt mer tips enn i oppgaven

INF Obligatorisk innlevering 7

Programmeringsspråket C Del 3

Feilmeldinger, brukerinput og kontrollflyt

Oblig2 - obligatorisk oppgave nr. 2 (av 4) i INF1000 h2006

Norgestur. Introduksjon. Steg 1: Et norgeskart. Sjekkliste. Scratch. Skrevet av: Geir Arne Hjelle

INF Obligatorisk innlevering 6

MAT-INF 1100: Obligatorisk oppgave 1

INF1010, 15. januar time. Parametriserte klasser (generiske klasser) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

Læringsmål og pensum. v=nkiu9yen5nc

Veileder for opplasting av AKTIV sporlogg til PC

Velkommen til. INF våren 2017

INF2270. Input / Output (I/O)

UNIVERSITETET I OSLO

Det viktigste i en moderne datamaskin er hovedkortet («motherboard»):

INF Obligatorisk innlevering 7

Scheduling og prosesshåndtering

Sauekontrollen kurs i Hordaland

TDT4110 Informasjonsteknologi grunnkurs: Kapittel 7 Filer og unntak ( exceptions ) Professor Alf Inge Wang Stipendiat Lars Bungum

UNIVA as, Tromøyveien 26, N-4841 Arendal, Norway Phone: , web:

Dagens tema Kapittel 8: Objekter og klasser

Transkript:

Obligatorisk oppgave 6 i INF1010: Dekryptering INF1010 Frist: mandag 8. mai 2017 kl. 12:00 Versjon 1.0 (8cb4fee ) Innhold 1 Innledning 1 2 Modell 2 3 Pakke for lytting på kanaler og dekryptering 2 4 Implementasjon 3 4.1 Antall telegrafister og kryptografer................. 3 4.2 Ekstra informasjon i meldingene.................. 3 4.3 Operasjonslederen.......................... 4 4.4 Monitorer............................... 4 4.5 Avslutning av trådene........................ 4 5 Løsning 4 1 Innledning I denne oppgaven skal du lage et program som med tråder som virker som produsenter og konsumenter. For å gjøre dette litt mer konkret, kan vi tenke oss at vi simulerer en etterretningssentral fra 1900-tallet som overvåker linjer hvor det sendes krypterte meldinger. Du skal bruke tråder og monitorer for å simulere forskjellige arbeidere.

2 Modell Etterretningssentralen har tre typer arbeidere, telegrafister, kryptografer og operasjonslederen. I programmet skal disse modelleres med hver sin klasse som vi kan opprette tråder av. Dette er et såkalt produsent/konsument-problem. Telegrafistene avlytter hver sin kanal og mottar meldinger. Disse meldingene må gis videre til kryptografene, som kan dekryptere dem. Telegrafisten blir således produsenten, som leverer fra seg meldingene til en monitor (vi kan tenke oss at denne er et bord), og kryptografen blir konsumenten, som henter meldinger fra monitoren. I tillegg skal kryptografene levere fra seg meldingene til en annen monitor slik at de samles der og kan hentes ut av en operasjonsleder. Her blir altså kryptografene produsentene og operasjonslederen konsumenten. Telegrafist 1 Kryptograf 1 Operasjonsleder Telegrafist 2 Monitor for krypterte meldinger Kryptograf 2 Kryptograf 3 Monitor for dekrypterte meldinger Telegrafist 3 Kryptograf 4 Figur 1: Flyten av meldinger i programmet. De røde og grønne pilene representerer henholdsvis overføringer av krypterte og dekrypterte meldinger. De røde boksene representerer tråd-objekter, og de blå boksene representerer monitor-objekter. NB: Dette er ikke en datastrukturtegning! 3 Pakke for lytting på kanaler og dekryptering For å lytte på kanaler, samt dekryptere meldinger, skal du benytte metoder som er gitt i en pakke som ligger på http://folk.uio.no/inf1010/v17/oblig/6/ lib. Les README-filen og dokumentasjonen for en beskrivelse av API-et og instruksjoner til hvordan du bruker denne pakken. Tiden det går mellom to meldinger på en kanal vil variere fra kjøring til kjøring. Det kan derfor hende at meldingene blir lagt inn i monitoren i forskjellig rekkefølge fra gang til gang. 2

Meldingene blir kryptert ved at tegnene i meldingen stokkes om. De spesielt interesserte kan lese om hvordan dette virker her. Tiden det tar å dekryptere en melding er proporsjonal med meldingens lengde. Det vil si at en melding på 200 tegn vil ta dobbelt så lang tid å dekryptere som en melding på 100 tegn. Dekrypteringsalgoritmen vil gå veldig fort på en moderne datamaskin, så derfor har vi lagt inn kunstig venting slik at programmet ikke fullføres umiddelbart. Dette gjøres ved kall på sleep() på den kjørende tråden. Merk at sovende tråder ikke vil bruke prosessortid, og dermed kan du kjøre flere tråder enn du har logiske prosessorer for å få programmet til å gå raskere. Dersom trådene utførte faktisk arbeid hele tiden, ville ikke programmet gått fortere hvis vi økte antall tråder utover antall logiske prosessorer. Dette er fordi hver logiske prosessor kun kan kjøre én tråd om gangen. 4 Implementasjon 4.1 Antall telegrafister og kryptografer Programmet skal være så generelt at antall kryptografer skal kunne settes til et vilkårlig positivt tall. Det samme gjelder antall telegrafister, men det skal ikke være flere telegrafister enn kanaler. (Hver telegrafist har sin egen kanal). Se dokumentasjonen for API-et for hvordan dette skal håndteres. 4.2 Ekstra informasjon i meldingene Dekrypteringsmetoden i API-et opererer på String-objekter, men du trenger også å lagre noe ekstra informasjon i hver melding. I tillegg til String-objektet som utgjør innholdet i meldingen, må hver melding ha et sekvensnummer og ID-en til kanalen meldingen kom fra. Denne informasjonen er nødvendig for å kunne skille meldingene etter kanal og sortere dem i riktig rekkefølge slik at meldingene fra hver kanal kan skrives ut sammen. Merk at kryptografene ikke trenger å ta hensyn til sekvensnummer eller kanal-id når de henter ut meldingene. Du bør bruke en passende beholder fra oblig 3 slik at ingen meldinger blir liggende for lenge i monitoren før de blir hentet av en kryptograf. (Det er også greit å bruke ArrayList eller LinkedList hvis du heller vil det.) 3

4.3 Operasjonslederen Når alle telegrafistene og kryptografene er ferdige, skal operasjonslederen skrive meldingene til fil, med én fil for hver kanal. Hver melding skal være adskilt av to linjeskift. Pass på at meldingene kommer i riktig rekkefølge! 4.4 Monitorer Husk at du bør unngå å utføre mye arbeid (og dermed bruke mye tid) i monitorene. Når en tråd har fått tilgang til en monitor, må alle de andre trådene vente. Utfordring. Klarer du å bruke samme klasse for begge monitor-objektene? 4.5 Avslutning av trådene Før main-tråden avslutter, skal alle de andre trådene være ferdige. For å få til dette, må du sørge for at produsentene på en eller annen måte signaliserer til monitoren at den ikke kommer til å produsere noe mer. Hvis monitoren ikke lenger har noen aktive produsenter, skal konsumentene avslutte når monitoren er tom. OBS. Husk at monitoren kan være tom uten at produsentene er ferdige. Da må konsumentene vente (ikke avslutte). 5 Løsning Det kan være lurt å løse denne oppgaven etappevis. 1. Telegrafist (lytting) 2. Telegrafist (levere kryptert melding) og Kryptograf (hente og dekryptere melding) 3. Kryptograf (levere dekryptert melding) og Operasjonsleder (hente og organisere dekrypterte meldinger) 4

Merk. Meldingene du mottar er kodet i UTF-8, så bruk UTF-8 når du skriver meldingene til fil. Du kan gjøre som følger for å opprette en PrintWriter som skriver til File utfil med UTF-8-koding: new PrintWriter(utfil, "utf-8"); Du vil se om programmet ditt virker som det skal ved at tekstene som skrives til fil er leselige og rekkefølgen på avsnittene virker rimelig. Du bør også sjekke at meldingene er ordnet med sekvensnumrene i stigende rekkefølge. Hvis du synes programmet går sakte, kan du øke antallet kryptografer. Med 3 telegrafister og 5 kryptografer tar det ca. 40 sekunder. Med 20 kryptografer tar det ca. 15 sekunder. Lykke til! Stein Gjessing og Kristian 5