Programmering III Juni 2017
Contents
Fredag
Application domain:
Opgave 1: Opret 2 applikationer. Applikation-1 skal være en simpel HelloWorld. Applikation-2 skal være et applikationDomain der henter HelloWorld programmet ind, og eksekvere koden.
Benyt følgende kode til ApplikationDomainet:
static void Main(string[] args)
{
AppDomain appDomain = AppDomain.CreateDomain("New Domain");
appDomain.ExecuteAssembly("HelloWorld.exe");
}
Opgave 2:
Hent denne fil, og lav et program der bruteforcer kodeordet. kodeordetindeholder kun lowerCase bogstaver, som ikke indeholder æ, ø eller å (hint: kodeordet er "hot"):
Efter at du har hentet filen, højreklik da på den og vælg egnskaber/properties. Nederst i venstre hjørne er der et flueben som skal fjernes i "fjern blokering".
https://drive.google.com/file/d/0B5oDizcmFQ1YT0phWlRzMGU5NFU/view?usp=sharing
Eksempel på kode:
static void Main(string[] args)
{
AppDomain encryptedFile = AppDomain.CreateDomain("New Appdomain");
string[] key = {"aaa"};
int success = encryptedFile.ExecuteAssembly("EncryptedFile.exe ", key);
if(sucess == 1)
{
Console.Writeline("Koden var korrekt");
}
else
{
Console.WriteLine("Koden var forkert");
}
Console.ReadKey();
}
Hjælpekode:
static void Main(string[] args)
{
char[] letters = { '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' };
int numberOfLetters = letters.Length; //26 LETTERS
Console.WriteLine("Number of letters: {0}", numberOfLetters);
for (int i = 0; i < numberOfLetters; i++)
{
Console.WriteLine(letters[i]);
}
Console.ReadKey();
}
Opgave 3:
Lav en bruteforcing algoritme der prøver alle tænkelige kombinationer af passwords. Prøv da at knække koden på følgende fil: https://drive.google.com/file/d/0B5oDizcmFQ1YUEpaa3V3OVJiVDQ/view?usp=sharing
(kodeordet indeholder stadig kun lowercase bogstaver uden æ,ø og å. Husk også at fjerne blokeringen ved denne fil.)
(hit: du kan benytte Ascii tabellen her: http://www.asciitable.com)
Opgave 4: Udvid din bruteforce algoritme og prøv da at knække koden på følgende fil: https://drive.google.com/file/d/0B5oDizcmFQ1YWlhabGxSWTR3T3c/view?usp=sharing
Koden indeholder 6 ialt bogstaver (samme regler som sidst). Benyt hinandens computere til at finde koden.
Netværksprotokoller:
Listener:
static void Main(string[] args)
{
UdpClient client = new UdpClient(11001);
IPEndPoint endpoint = new IPEndPoint(IPAddress.Any, 11001);
byte[] recievedBytes = client.Receive(ref endpoint);
string recievedMessage = Encoding.ASCII.GetString(recievedBytes);
Console.WriteLine("Beskeden var: " + recievedMessage);
Console.ReadKey();
}
Sender:
static void Main(string[] args)
{
Console.WriteLine("Type an IP address:");
string ip = Console.ReadLine();
UdpClient client = new UdpClient();
IPEndPoint endpoint = new IPEndPoint(IPAddress.Parse(ip), 11001);
string message = "Hej!";
byte[] bytesToSend = Encoding.ASCII.GetBytes(message);
client.Send(bytesToSend, bytesToSend.Length, endpoint);
Console.WriteLine("Message sendt!");
Console.ReadKey();
}
Opgave 1: Lav 2 programmer hvor det ene program kan sende en besked til det andet, som kan modtage og vise beskeden.
Opgave 2: Lav programmerne så de både kan sende og modtage data til og fra hinanden.
Eksempel på tråde:
static void Main(string[] args)
{
Console.WriteLine("Start");
Thread thread = new Thread(myThread);
thread.Start();
string input = Console.ReadLine();
Console.WriteLine(input);
Console.ReadKey();
}
static void myThread()
{
for (int i = 0; i < 10; i++)
{
Console.WriteLine(i);
}
}
XML
Eksempel på serialisering:
static void Main(string[] args)
{
Tank t1 = new Tank();
XmlSerializer serializer = new XmlSerializer(typeof(Tank));
StringWriter sWriter = new StringWriter();
serializer.Serialize(sWriter, t1);
string myXML = sWriter.ToString();
Console.WriteLine(myXML);
Console.ReadKey();
//Vi sender vores XML igennem en netværksforbindelse.
//Den bliver nu modtaget:
Tank enemyTank;
StringReader sReader = new StringReader(myXML);
enemyTank = (Tank)serializer.Deserialize(sReader);
Console.WriteLine("Name of enemy tank is: " + enemyTank.playerName);
Console.ReadKey();
}
Opgave 1:
Lav et program der serialisere data fra et objekt til XML og som sender det igennem en netværksforbindelse. Når XML strengen bliver modtaget skal den deserialiseres til et objekt.
Kryptering og dekryptering
Opgave 1: Lav en algoritme, der kan kryptere en XML eller JSON string ud fra et brugerdefineret password. Filen skal kunne sendes igennem en netværksforbindelse og dekrypteres med samme password hos modtageren.
Hvis passwordet er forkert, skal brugeren få besked om at nøglen var forkert.
Opgave 2: Benyt en selvvalgt krypteringsalgoritme til at kryptere og dekryptere en XML/JSON string.
Torsdag
Dagens opgave: https://drive.google.com/file/d/0B5oDizcmFQ1YNEJvR3l1Wk9SNkk/view?usp=sharing
Fredag
Link til eksamensopgave:
https://drive.google.com/file/d/0B5oDizcmFQ1YbzA5bGd1Z0ctUG8/view?usp=sharing