Gesäll provet Internetprogrammering I Författare: Henrik Fridström Personnummer: 870408-6654 Skola: DSV Val av uppgift: En e-mail applikation med kryptering Bakgrund: Som sista uppgift i kursen Internetprogrammering valde jag att göra en e-mail applikation med kryptering. Detta då jag har ett intresse av säkerhet sedan innan och det lät som något roligt att prova på. Jag hade ingen erfarenhet att jobba med javamail sedan tidigare och jag har endast applicerat kryptering på e-mail sedan tidigare genom redan gjorda applikationer. Förgrundsarbete: Vad jag behövde göra först var att kolla upp vilka sätt man kan skicka mail. Jag började försöka utgå från kursens demoprogram som finns på sidan men då jag inte kunde skicka eller ta emot med detta fick jag gå efter andra exempel på internet. Jag lärde mig vilka protokol det går att amvända och bestämde mig tidigt för smtp för att skicka mail, och pop3 för att ta emot. Dessa då de är väl utbredda och används av Hotmail, vilken var den e-mail operatör jag använde mig av för testning under utvecklandet av applikationen. Jag kollade sen på vilka algoritmer som fanns att använda för krypteringen. Då det på sidan i en av de frivilliga uppgifterna efterfrågas stark kryptering (jag har inte gjort denna uppgift), så letade jag efter en algoritm som var hyfsat stark. Jag valde AES då jag sedan tidigare vet den är stark och det inte var för mycket arbete att applicera denna. Själva GUit gjordes för att efterlikna demo programmet för e-mail på kursens hemsida (jag har inte heller gjort denna frivilliga uppgift) då denna såg ut att vara en bra grund att gå på. Några ändringar behövdes göras för att bättre passa min tolkning av uppgiften. Programmet i sitt slutform:
Utförande: All kod för mail delen skrevs med paketet javamail som grund. Jag kollade upp vad som krävdes av mail operatören vilket var auktorisering av en typ för för sändning av mail och en typ för mottagning av mail. Delen att sända var enkel då processen att sätta upp en connection är ganska rakt på sak och ända riktiga problemet var att få auktoriseringen att fungera, något som behövs om man vill skicka mail genom Hotmail. Att skapa ett meddelande var desto enklare. När det sedan kom till att ta emot mail behövdes processen att hämta mail från sin inkorg, något som görs genom Folder i javamail biblioteket. Auktoriseringen behövdes här göras nästan helt olik den vid sändning då SSL krävdes. Att sen läsa av meddelanden var väldigt enkelt. Det skulle i alla fall ta upp mot 6 timmar innan mail kunde skickas och tas emot utan problem. Properties sätts ut för att skapa möjlighet att auktorisera sig. Password Authentication under var också viktig för att kunna koppla upp sig mot mail servern. Här skapas ett Message som sedan fylls med all information mailet behöver. När detta är klart skapas ett Transport objekt som man använder för att göra kopplingen till servern. Här ovan ställs properties in för SSL så att man kan auktorisera sig mot en pop3 server för att hämta mail
En del av kod som tar ut meddelandet genom en Folder Delen med kryptering var den som kom efter och jag använde till denna paketet crypto som innehåller komponenterna för nycklar, chiffer, och nyckel generator. Att sedan sätta ihop koden var inte för svårt om man känner till hur kryptering med nycklar fungerar. Jag ska inte säga att jag inte hade några problem för jag satt flera timmar och felsökte, men lyckades tillsist klura ut allt. Jag valde att ha alla nycklar på fil i metoden att den filen kan delas av de som vill kunde skriva och ta emot krypterade meddelanden till varandra. Det finns såklart mer avancerade metoder för detta, samt mera avancerade metoder för att kryptera starkare, men jag tyckte ändå jag skapade något enkelt att använda, förstå och samtidigt effektivt nog för en applikation i det här laget. En del av koden när nyckeln skapas Ciffret initiateras och kodas för att skickas. Själva strängen text som är meddelandet krypteras sen Det sista jag gjorde var UI:et som är ett enkelt GUI med olika komponenter för textinmatning och mottagande samt action listeners för de olika funktionerna. I princip fanns det ett par text rutor för uppgifter till att auktorisera sig, en textruta för att skriva sitt e-mail och få sitt e-mail uppskrivet, samt möjligheten att välja om man ville ta emot eller skicka. Jag valde inte att ta med attachments då jag
kände applikationen redan hade det viktigaste för att visa kryptering av e-mails. Mer skulle vara fullt möjligt att ha med, men onödigt då som sagt det viktigaste i min mening redan fanns i programmet. Slutsats: Jag är nöjd med det program jag gjort som min gesäll prov och tycker att det varit väldigt lärorikt. Jag har sett massor av sätt som jag skulle kunna förbättra mitt program och vill gärna jobba vidare på allt med kryptering. Jag känner inte heller detta skulle vara för svårt för mig då denna start projekt har lärt mig grunderna. Det finns ett flertal sätt man kan förbättra krypteringen samt många sätt för att hantera e-mail bättre. Något som skulle vara absolut roligast skulle vara att sätta upp en egen server för att skicka mail samt fiffla med metoder att dela nycklar genom e-mail. Guide till programmet: Att skicka ett mail är väldigt enkelt. Du klickar bara i krysset Send till vänster, och sen fyller du i alla uppgifter. När du är klar klickar du sen send : Dyker detta meddelande upp ovanför text rutan så har meddelandet skickas Skulle du däremot till exempel glömma skriva in servern eller fel namn på servern kommer istället detta meddelande fram
Om programmet körs i terminal visas också System.out.println utskrifterna som visar det färdiga meddelandet samt hur den krypterade texten ser ut längs ner Klickar du nu istället in krysslådan recieve kommer delar av GUI:et ändras för att representera detta. Tex kommer To och Subject bli utsuddade då dessa inte används för att ta emot mail. De andra återstår däremot och du får ändra dessa efter hur du vill hämta din mail.
Du kommer nu se meddelandet som du tog emot senast okrypterat igen på skärmen. Också nu kan du se ett meddelande message recieved eller om det blivit fel något i stil med error message not recieved : System.out.println i programmet skriver ut lite mer ingående information om datan, se ovan för exempel: Av: Henrik Fridström