Kryptering

bild

Inledning

Denna utmaning går ut på att du ska knäcka en krypterad fil. Krypteringen är av en typ som brukar kallas "XOR kryptering" och är en mycket simpel typ av kryptering. Du bör därför inte använda den till något känsligt i framtiden då den ej erbjuder något säkert skydd. Däremot kan du genom att anta utmaningen lära dig grunderna inom kryptering!

Vad är kryptering?

Jo, data kan vara känsligt. Därför vill man omvandla, kryptera, meddelanden och information så att obehöriga inte kan förstå något av meddelandet ifall det skulle hamna i orätta händer. Det finns såklart många olika sätt att göra detta på. Oftast använder man sig av en s.k. kodnyckel för att kunna koda av, dekryptera, informationen. En kodnyckel används också för att kryptera informationen. Nyckel för kodning och avkodning behöver inte vara samma. Detta kan tyckas märkligt men sådana metoder kallas för asymmetrisk kryptering.

Vi ska utnyttja samma kodnyckel både vid kodning och vid avkodning. Detta kallas då för symmetrisk kryptering. Här gäller det att vi alltid håller kodnyckeln hemlig!

Exempel - XOR-kryptering

XOR, som den logiska grinden, är en funktion som har följande sanningstabell:

A B A XOR B
0 0 0
1 0 1
0 1 1
1 1 0

XOR är kort för exclusive OR och har en del intressanta egenskaper. XOR kan användas för att kasta om data utan att förstöra den. Tabellen ovan visar alla möjliga kombinationer vi kan ha mellan två bitar (A och B).

Vanligtvis låter man A vara datan som ska krypteras och B vara kodnyckeln. Resultatet, A XOR B, blir då vår krypterad data. XOR kan vi nu använda på flera bitar i taget med en större kodnyckel. T ex en 8 bitars kodnyckel som XOR’as ihop med 8 bitar data. Denna data kan t ex vara ett ASCII (char) tecken. Om jag vill koda texten "HEJ" med kodnyckeln 40:

DATA (ascii) H E J
DATA (binärt) 01001000 01000101 01001010
40 (binärt) 00101000 00101000 00101000
DATA XOR 40 (binärt) 01100000 01101101 01100010
DATA XOR 40 (ascii) _ m b

Översätter man det kodade meddelandet till ASCII text så får man bara rappakalja. Vi har alltså lyckats kryptera vårt meddelande! Det roliga är nu om vi försöker koda av med att XOR’a med samma kodnyckel (40):

DATA (ascii) _ m b
DATA (binärt) 01100000 01101101 01100010
40 (binärt) 00101000 00101000 00101000
DATA XOR 40(binärt) 01001000 01000101 01001010
DATA XOR 40(ascii) H E J

Vi får nu tillbaka vårt originalmeddelande "HEJ". Alltså fungerar vår XOR-kryptering!

Bitvis XOR i C#

Exemplet nedan visar hur du utför en bitvis XOR mellan variablerna a och b.


int a = 189;	//10111101 binärt
int b = 212;	//11010100 binärt
int y = a ^ b;  //01101001 binärt 

Okej, åter till utmaningen!

Utmaning

  • Skapa ett Console Application som du döper till "kryptering"
  • Gör en funktion som heter ”Decrypt” (kryptera), funktionen ska:
  • Ta emot en kodnyckel (int), ett namn på en indatafil (string) och ett namn på en utdatafil (string).
  • Kunna kryptera datan i indatafilen med kodnyckeln (XOR) och spara den krypterade datan i utdatafilen.
  • Läs in rad för rad. För varje rad går du igenom varje tecken i strängen och bearbetar detta.
  • Ha med enklare exceptionhantering ifall det skulle bli något fel.

Kodad text

Här nedan finns en krypterad fil "coded.txt". Denna fil innehåller texten till en känd sång. Texten är XOR-krypterad med en 8-bitars kodnyckel. Använd din funktion för att koda av denna text.

Konstruera ett program som testar alla kombinationer av kodnycklar. Eftersom kodnyckeln bara är 8 bitar så finns det bara 256 olika kombinationer. Du ser direkt när du lyckats koda av filen helt.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *

Scroll to top