Professional Documents
Culture Documents
DR - Aplikacija Za Šifrovanje Fajlova U C# Programskom Jeziku
DR - Aplikacija Za Šifrovanje Fajlova U C# Programskom Jeziku
DR - Aplikacija Za Šifrovanje Fajlova U C# Programskom Jeziku
Mentor:
Kandidat:
Kristina Kunjadid-Dulibrk
Beograd, 2015.
UNIVERZITET SINGIDUNUM
Fakultet za informatiku i raunarstvo
Beograd, Danijelova 32
MENTOR
________________________
Doc. dr Saa Adamovid
DEKAN
________________________
Prof. dr Dragan Cvetkovid
Kristina Kunjadid-Dulibrk
SADRAJ
1. Uvod .............................................................................................................. 5
1.1 Predmet istraivanja ...................................................................................... 5
1.2 Doprinosi rada ............................................................................................... 6
1.3 Struktura rada................................................................................................ 6
2. Pregled u oblasti istraivanja .......................................................................... 7
2.1 VeraCrypt ....................................................................................................... 7
2.2 GNU Privacy Guard ...................................................................................... 10
2.3 AES Crypt ..................................................................................................... 13
2.4 7-zip ............................................................................................................. 15
2.5 AxCrypt ........................................................................................................ 17
3. Teorijske osnove istraivanja ......................................................................... 19
3.1 Pregled simetrinih ifarskih algoritama ..................................................... 19
3.1.1 DES ................................................................................................................... 19
3.1.2 Blowfish ........................................................................................................... 22
3.1.3 AES ................................................................................................................... 22
Kristina Kunjadid-Dulibrk
Kristina Kunjadid-Dulibrk
Spisak slika
2.1 Kreiranje volume fajla ..................................................................................................... 7
2.2 Ponueni izbor ifarskih sistema i he funkcija ............................................................... 8
2.3 Zahtev za unos lozinke .................................................................................................... 8
2.4 Uitavanje volume fajla na raunar ................................................................................ 9
2.5 Novi disk M:.................................................................................................................. 9
2.6 Komande za prebacivanje fajlova.................................................................................... 9
2.7 Zatvaranje volume fajla ................................................................................................. 10
2.8 Biranje fajla za ifrovanje .............................................................................................. 11
2.9 Pokretanje postupka ifrovanja kroz Windows Explorer .............................................. 12
2.10 Izbor ifarskog sistema koji de se koristiti u procesu ifrovanja ................................. 12
2.11 Unoenje lozinke primaoca ......................................................................................... 13
2.12 Zapoinjanje procesa ifrovanja koristedi AES Crypt................................................... 14
2.13 Unoenje lozinke ......................................................................................................... 14
2.14 Zapoinjanje procesa deifrovanja koristedi AES Crypt .............................................. 14
2.15 Pokretanje 7-zip aplikacije nad fajlom koji se ifruje .................................................. 15
2.16 Prozor za podeavanje opcija ifrovanja ..................................................................... 16
2.17 Unoenje tajne lozinke ................................................................................................ 16
2.18 Pokretanje AxCrypt alata kroz Windows Explorer ...................................................... 17
2.19 Izbor ifrovanja lozinkom i/ili fajl-kljuem .................................................................. 18
3.1 Fejstelova strukura za simetrine ifre[7]....................................................................... 20
3.2 Grafiki prikaz jedne runde DES algoritma[7] ................................................................. 21
3.3 Grafiki prikaz strukture AES algoritma u sluaju koridenja 128-bitnog kljua[13] ....... 23
3.4 Grafiki prikaz Rijndael algoritma[15] ............................................................................. 26
4.1 Izgled aplikacije CryptoFile nakon njenog pokretanja ............................................... 35
4.2 Prozor za odabir fajla koji de se ifrovati ....................................................................... 36
4.3 Prikaz foldera ifrovanje ............................................................................................ 36
3
Kristina Kunjadid-Dulibrk
Spisak tabela
Tabela 3.1 Specifikacije osnovnih SHA algoritama[16] ......................................................... 30
Kristina Kunjadid-Dulibrk
1. Uvod
1.1 Predmet istraivanja
Poslovanje, ili bilo kakav drugi vid digitalne komunikacije u dananje vreme
neizostavno ukljuuje upotrebu raunara i samim time skladitenje i uvanje velike
koliine digitalnih informacija. Sa razvojem mnogobrojnih naina za zatitu linih ili
poslovnih informacija, koji podrazumevaju algoritme razliitog nivoa
kompleksnosti, paralelno su se razvijali i algoritmi za nedozvoljen pristup, izmenu
ili ak krau takvih informacija. Iz tog razloga, javlja se potreba za kompletnom
kontrolom i zatitom naih podataka. Ukljuenje bilo koje druge strane u taj
proces, bilo da je to proizvoa softvera za zatitu podataka koji koristimo ili
prosto osoba sa kojom delimo raunar, moe znatno ugroziti nau bezbednost.
Istraivanjem trenutnog stanja na tritu, kada su u pitanju reenja za
zatitu podataka, doli smo do zakljuka da svakako postoji veliki broj aplikacija
koje su upravo razvijene u ovu svrhu. Meutim, kako smo ved napomenuli rizike
koje ovakav izbor zatite nosi, bilo da je on apsolutno besplatan ili pladen, kao
najbolje reenje ovog problema jo uvek predstavlja razvoj sopstvenog softvera za
zatitu informacija.
Osnovna funkcija aplikacije, koja predstavlja temu ovog rada, bide
ifrovanje svih vrsta fajlova Rijndael kriptografskim algoritmom koji predstavlja
iterativni blokovski, simetrini ifarski algoritam, i predstavlja varijaciju AES
algoritma. Klju de biti veliine 128 bita, i korisnik de ga samostalno unositi u vidu
ifre koja sadri najmanje 8 slova ili brojeva po sopstvenom izboru.
Takoe, aplikacija de posedovati ugraenu funkciju za automatsko
izraunavanje he vrednosti fajla pre ifrovanja i nakon deifrovanja, i upis
dobijene vrednosti u tekstualni fajl. Na taj nain, korisnik de imati uvid u sam
integritet fajla i biti u mogudnosti da zakljui da li je dobijeni fajl upravo onaj koji je
inicijalno i ifrovan. U svrhu raunanja he vrednosti koristide se jedna od
najrasprostranjenijih postojedih he funkcija SHA1.
Grafiki korisniki interfejs aplikacije bide prilagoen prosenom korisniku i
omogudide lako i jednostavno snalaenje u aplikaciji, dok de sama aplikacija vriti
prevenciju od bilo kakve mogude greke od strane korisnika. Na taj nain upotreba
aplikacije de biti sigurna i osloboena od potencijalnih greaka koje bi mogle
ugroziti sam proces zatite odabranog fajla.
Aplikacija de biti razvijena u programskom alatu Microsoft Visual Studio u
programskom jeziku C#.
Kristina Kunjadid-Dulibrk
Kristina Kunjadid-Dulibrk
2.1 VeraCrypt
VeraCrypt predstavlja besplatan open-source alat koji slui za ifrovanje
fajlova. Aplikacija podrava rad na Windows, Linux i Mac OS X operativnim
sistemima. [1]
U zavisnosti od izbora korisnika, za ifrovanje se mogu koristiti simetrini
ifarski sistemi AES, Serpent i Twofish kao i sve njihove kombinacije. Duina kljua
je 256 bita. Kada su u pitanju he algoritmi ovaj program prua korisniku
mogudnost izbora izmeu RIPEMED-160, SHA-512 i Whirlpool algoritma. Odabrani
he algoritam koristi se zajedno sa sluajnim podacima generisanim od strane
programa u RAM memoriji kao parametar za funkciju Random Number Generator
koja generie glavne, pomodne kljueve, kriptografsku so koja se koristi za
zainjavanje ili poboljavanje lozinke i fajl-kljueva. Svi generisani parametri
koriste se za zatitu odreenog diska datoteke.
Sluajni podaci generisani od strane programa zasnivaju se na kretanjima
mia, upotrebe tastature ali i raznih parametara vezanih za operativni sistem na
kome se program koristi.
Nakon instalacije programa, potrebno je napraviti poseban fajl tj.
Container koji de predstavljati skladite podataka koje elimo da zatitimo. On se
kreira kroz interfejs VeraCrypt-a i u daljem programu naziva se volume fajl (Slika
2.1). Tokom procesa njegovog kreiranja, bira se ifarski sistem, he algoritam i
lozinka koji de se nadalje koristiti za pristup formiranom container-u (Slika 2.2 i
2.3). Lozinka moe da sadri maksimalno 64 karaktera.
Kristina Kunjadid-Dulibrk
Kristina Kunjadid-Dulibrk
Kristina Kunjadid-Dulibrk
Kristina Kunjadid-Dulibrk
11
Kristina Kunjadid-Dulibrk
12
Kristina Kunjadid-Dulibrk
Generisan ifrat nosi naziv originalnog fajla kao i naziv njegove ekstenzije, s
tim to se na sam kraj dodaje posebna ekstenzija .gpg koja oznaava da je re o
fajlu ifrovanom GnuPG softverom.
Kada primalac dobije njemu namenjeni ifrat, deifrovanje se odvija slino
kao i ifrovanje - odabirom komande File->Decrypt, nakon koje sledi odabir ifrata
i odreivanje naziva deifrovanog fajla. Na kraju se obavlja unoenje lozinke tajnog
kljua primaoca (Slika 2.11) i time se proces deifrovanja uspeno izvrava.
13
Kristina Kunjadid-Dulibrk
14
Kristina Kunjadid-Dulibrk
2.4 7-zip
7-zip predstavlja open-sorce softver koji primarno slui za kompresovanje
fajlova ali poseduje i ugraenu funkciju koja daje mogudnost ifrovanja fajlova.
Iako zatita fajlova nije glavna funkcija ovog program, on se sve vie koristi u ovu
svrhu, pa ipak spada u jedan od najzastupljenijih softvera za koji se korisnici
odluuju kada ele da zatite svoje podatke. Vedina izvornog koda je pod GNU
LGPL licencom (GNU Lesser General Public License). Program je zvanino dostupan
u obliku konzolne i grafike aplikacije na 32-bitnom i 64-bitnom Windows
operativnom sistemu, ali postoje i nezvaniene verzije pogodne za Linux i Mac OS
operativne sisteme. [1]
Nakon instalacije, 7-zip je dostupan kroz Windows Explorer i pokrede se
odabirom fajlova koji se tite i desnim klikom mia (Slika 2.15). U padajudem
meniju odabira se opcija 7-zip->Add to archive.. nakon koje se pojavljuje prozor
za podeevanje opcija ifrovanja (Slika 2.16). Iako korisnik ima mogudnost da
izabere jedan od ponuenih formata arhive koja se dobija na kraju procesa, jedino
zip i 7z formati nude opciju ifrovanja podataka. Oba formata nude koridenje
AES-256 algoritma, dok zip nudi i stariju metodu ZipCrypto koja se smatra
slabijom zatitom pa se zato nede razmatrati u ovom radu. Kao to je ved ranije
pomenuto, koristedi AES-256 algoritam, podaci se ifruju u blokovima od po 128
bita u 14 rundi, dok je klju veliine 256 bita.[5] Klju se generie na osnovu unete
tajne lozinke, koja se takoe zahteva i pri pokuaju deifrovanja datoteke (Slika
2.17). Nakon zavretka procesa ifrovanja, na istoj lokaciji se pojavljuje datoteka u
ranije odabranom formatu. Bitno je napomenuti da bilo koji fajlovi dodati u
zaidenu datoteku nakon procesa ifrovanja, nede biti zatideni na isti nain, pa se
u tom sluaju savetuje ponavljanje postupka ifrovanja sa prethodim i dodatnim
fajlovima koje je potrebno zatititi. Na ovaj nain fajlovi su sigurni i nije im mogude
neovladeno pristupiti.
15
Kristina Kunjadid-Dulibrk
16
Kristina Kunjadid-Dulibrk
2.5 AxCrypt
AxCrypt je besplatan open-source alat za ifrovanje podataka. Dostupan je
na 32-bitnim i 64-bitnim Windows operativnim sistemima na 12 jezika i licenciran
je od strane GNU GPL (GNU General Public License). Takoe, javno je dostupan i
izvorni kod programa u C++ i C# programskom jeziku kao i specifikacije koridenog
algoritma. Dosta godina u nazad ova aplikacija dri jedno od pet vodedih mesta
kada su u pitanju aplikacije za ifrovanje podataka, pa je zato svakako zasluila
svoje mesto i na ovoj listi.[1]
Kao i neke od ved pomenutih aplikacija, AxCrypt se takoe nakon
instalacije automatski integrie u Windows Explorer i moe se pokrenuti desnim
klikom na fajl ili folder koji je potrebno zatititi. Vano je napomenuti da se u
sluaju ifrovanja foldera za izlaz procesa ne dobija jedan ifrovan fajl, ved se svi
fajlovi unutar tog foldera ifruju pojedinano. Nakon desnog klika i odabira
AxCrypt stavke, korisniku je dostupno vie opcija : ifrovanje, ifrovanje kopije fajla
i ifrovanje kopije u .exe format , dok prve dve opcije za rezultat imaju fajl sa
.axx ekstenzijom. U ovom sluaju bide odabrana funkcija Encrypt (Slika 2.18).
U prozoru, koji se otvara korisniku, prua se izbor ifrovanja lozinkom ili
fajl-kljuem, ali i kombinacija te dve opcije koja predstavlja jau i stabilniju zatitu
(Slika 2.19).
U sluaju odabira lozinke preporuuje se unos od minimum 5 karaktera, ali
je preporueno uneti 22 ili vie nepovezanih velikih i malih karaktera u kombinaciji
sa brojevima kako bi se dostigla maksimalna sigurnost koridenjem kljua od 128
bita.[6]
17
Kristina Kunjadid-Dulibrk
Kada je u pitanju zatita fajl-kljuem u obzir dolazi bilo koji tip fajla, dok je
kroz AxCrypt dostupno i generisanje ovakvog tipa kljua. Pri procesu generisanja
fajl-klua koristi se PRNG (The pseudo random number generator) zajedno sa
SHA1 kao he algoritmom. Kolekcija sluajnosti koridenih za PRNG se generie na
osnovu uobiajenih i manje uobiajenih tehnika, od kojih su neke - unosi sa
tastature, pozicija mia ili odreenog prozora na desktopu.
AxCrypt koristi AES-128 algoritam za ifrovanje i SHA-1 ha algoritam za
saimanje i verifikaciju podataka. Klju je duine 128 bita, a inicijalizacioni vektor
predstavlja nasumian (random) parametar u ovom procesu.
U sluaju odabira kombinacije obe od ove dve opcije, upotrebe lozinke i
fajl-kljua, ova dva podatka se heuju SHA1 algoritmom, i tek nakon toga se
koriste za generisanje tajnog kljua koji se koristi za ifrovanje i deifrovanje.
Proces deifrovanja zahteva od korisnika lozinku i/ili fajl-klju, i ispravnim
unosom traenih parametara, omoguden je pristup otvorenim fajlovima.[6]
18
Kristina Kunjadid-Dulibrk
19
Kristina Kunjadid-Dulibrk
[7]
Kristina Kunjadid-Dulibrk
21
[7]
Kristina Kunjadid-Dulibrk
3.1.2 Blowfish
Blowfish je simetrini, blokovski ifarski algoritam. Dizajniran je od strane
amerikog kriptografa Brusa nera ( Bruce Schneier-a) 1933. godine kao brza i
besplatna alternativa za ved postojede ifarske algoritme, i esto se koristi kao
zamena za DES algoritam. Od samog nastanka do sada ovaj algoritam se esto
analizirao i vremenom zasluio poverenje, kao jedan od veoma jakih metoda
algoritama za ifrovanje podataka. Ovaj algoritam je dostupan besplatno, za javnu
i linu upotrebu, i njegovo koridenje ne zahteva licencu. [9]
Blowfish algoritam ifruje podatke u blokovima od po 64 bita u 16 rundi i
duina kljua moe da varira od 32 do 448 bita. Za ifrovanje koristi Fejstelovu
strukturu (objanjenje u poglavlju 3.1.) i velike podkljueve izvedene iz osnovnog
tajnog kljua. [10]
Generisanje kljua se odvija na poetku svakog ifrovanja i deifrovanja i tu
se najvie 448 bita pretvara u ukupno 4168 bita. Prolaskom kroz 521 iteraciju
generiu se pod kljuevi za Blowfish algoritam. [11]
Jedan je od najbrih blokovskih algoritama ukoliko su kljuevi koje se
koriste konstantni. Pogodan je za aplikacije u kojima se klju ne menja esto, jer se
svaki novi klju obrauje pre upotrebe, i po kompleksnosti to je ekvivalentno
ifrovanju 4KB teksta, to je veoma sporo u odnosu na druge blokovske ifre. [10]
3.1.3 AES
AES (Advanced Encryption Standard) je simetrini blokovski algoritam koji
slui za zatitu podataka i koristi se u Amerikoj vladi za zatitu poverljivih
informacija.
1997. godine NIST je objavio da je potrebna zamena za DES (Data
Encryption Standard) algoritam koji se koristio dugo vremena, i tada ved postajao
ranjiv na brute-force napade. Jedan od predloenih algoritama bio je Rijndael
algoritam koji je kasnije koriden kao osnova za AES algoritam objavljen u oktobru
2000. godine.[12] Rijndael algoritam bide detaljnije objanjen u narednom
poglavlju.
Postoje tri verzije ovog algoritma i to su: AES-128, AES-192 i AES-256. Svaka
verzija ifruje i deifruje podatke u blokovima od 128 bita koristedi duinu kljua
koja je navedena u samom nazivu algoritma, dakle redom 128, 192 i 256 bita.
Ukoliko se koristi klju duine 128 bita, ifrovanje se odvija u 10 rundi, 192 bita 12 rundi i 256 bita 14 rundi. Izuzevi poslednju rundu, sve runde su identine.
Pre samog poetka ifrovanja, pravi se jedna matrica podataka, zasnovana
na dobijenom kljuu i ona se kasnije koristi kao izvor podataka kada je potrebno
iskoristiti deo kljua. Nakon toga se izvrava XOR funkcija nad nizom otvorenog
teksta i prve etiri rei iz matrice kljua. Tek tada sam proces ifrovanja moe da
22
Kristina Kunjadid-Dulibrk
3.3 Grafiki prikaz strukture AES algoritma u sluaju koridenja 128-bitnog kljua
23
[13]
Kristina Kunjadid-Dulibrk
Kristina Kunjadid-Dulibrk
25
Kristina Kunjadid-Dulibrk
[15]
Rijndael ifra je teorijski slaba na Square attack, ali u praksi ovaj napad
nije dovoljan da bi ugrozio sigurnost algoritma. Takoe, ovaj algoritam ogranien
je deifrovanjem koje traje due od procesa ifrovanja i zahteva vie koda i ciklusa
obrade, to nije pogodno za implementacije kod, na primer, smart kartica.
Uprkos bogatoj i kompleksnoj algebarskoj strukturi koju poseduje Rijndael
algoritam, njegovo izvoenje zahteva vrlo malo memorije i lako se moe
implementirati u razliite kompjuterske sisteme, pa ak i one koji su memorijski
ogranieni.
to se tie otpornosti ovog algoritma na brute-force napad, ta osobina
opisana je u jednom citatu: Pretpostavljajudi da neko moe da napravi mainu
koja je sposobna da nae DES klju u sekundi (tj. da isproba 255 kljueva po
sekundi), onda bi takvoj maini trebalo priblino 149 hiljada milijardi godina da
razbije 128-bitni AES klju. Kako bi se stvorio pojam o toliko dugom periodu, treba
navesti injenicu da se veruje da je univerzum star manje od 20 milijardi
godina.[15]
26
Kristina Kunjadid-Dulibrk
3.3 He funkcije
He funkcije su funkcije koje za ulaz uzimaju poruku proizvoljne duine i na
izlazu generiu niz fiksne duine koji se najede naziva he vrednost, he kod ili
otisak. Duina izlaza, kod najede upotrebljavanih he funkcija, varira od 160 do
512 bita, u zavisnosti od koridenog algoritma.
Kako izlaz ovakvih funkcija zavisi od svakog bita u prosleenoj poruci na
ulazu, bilo kakva promena ulaza rezultuje potpunom promenom izlaza. Iz razloga
ove funkcije su nale svoju primenu u procesu provere autentinosti poruka iliti
primljenih podataka.
Poruka kao i njena he vrednost moraju biti zatideni na neki nain
prilikom slanja, kako im ne bi bilo mogude pristupiti ili ih eventualno izmeniti.
Ukoliko se poruka i njena he vrednost alju potpuno nezatideni, na prijemnoj
strani ne postoji mogudnost za autentifikaciju. Postoje razliiti naini za zatitu he
vrednosti poruke i navedeni su u nastavku teksta.
Kristina Kunjadid-Dulibrk
Kristina Kunjadid-Dulibrk
Kristina Kunjadid-Dulibrk
Veliina
poruke
(u bitima)
Veliina
bloka
(u bitima)
Veliina
rei
(u bitima)
Veliina izlazne
he vrednosti
(u bitima)
Sigurnost
(idealno)
(u
bitima)
< 264
512
32
160
80
64
512
32
256
128
SHA-384
<2
128
1024
64
384
192
SHA-512
< 2128
1024
64
512
256
Algoritam
SHA-1
SHA-256
<2
[16]
30
Kristina Kunjadid-Dulibrk
3.4 SHA-1
Funkcija iz grupe SHA algoritama koja se najvie koristi je ubedljivo SHA-1
funkcija. Iako bi njegova bezbednost teoretski mogla biti veda, on se i dalje koristi
u aplikacijama i najpoznatijim protokolima kao to su SSL/TLS, PGP, SSH, S/MIME i
IPSec. SHA-1 je naslednik dugo koridene he funkcije MD5 koja se i dalje koristi u
velikom broju aplikacija kao funkcija za izraunavanje he vrednosti. Nain na koji
ovaj algoritam funkcionie, bide objanjen u nastavku teksta.
Pre poetka izraunavanja he vrednosti poruke, poetna he vrednost H(0)
koja de biti koridena u daljem procesu setuje se na unapred odreene vrednosti.
Kako je izlazna he vrednost duine 160 bita, ona se u ovom sluaju predstavlja sa
pet 32-bitnih rei.
{
Operacije predstavljene znakovima funkcioniu na nivou bita.
- operacija AND
- operacija XOR
Takoe kao konstante SHA-1 algoritam koristi osamdeset 32-bitnih rei K0,
31
Kristina Kunjadid-Dulibrk
je poetna, a
je zavrna he vrednost).
Kristina Kunjadid-Dulibrk
For i=1 to N:
{
1. Priprema rasporeda funkcija koje de se primenjivati na reima.
{
33
Kristina Kunjadid-Dulibrk
}
Nakon ponavljanja navedena etiri koraka N puta (tj. nakon obrade
poslednjeg bloka poruke), 160-bitna he vrednost se dobija konkatenacijom H(N)
vrednosti (
).[19]
SHA-1 algoritam razbijen 2005. godine. Tada je dokazano da je mogude
naidi na dve iste he vrednosti u prostoru veliine od 269 bita to je mnogo manje u
odnosu na ranije naveden nivo sigurnosti od 280 koji je povezan sa ovom he
funkcijom.[16]
34
Kristina Kunjadid-Dulibrk
35
Kristina Kunjadid-Dulibrk
U folderu ifrovanje pored originalnog fajla, pojavljuju se dva nova fajla jedan sa ekstenzijom .enc, drugi sa ekstenzijom .hsh (Slika 4.3). Fajl *.enc
predstavlja ifrat, dok fajl *.hsh predstavlja tekstualni fajl se he vrednodu
originalnog fajla pre ifrovanja.
36
Kristina Kunjadid-Dulibrk
37
Kristina Kunjadid-Dulibrk
Kristina Kunjadid-Dulibrk
39
Kristina Kunjadid-Dulibrk
5. Zakljuak
U zakljuku je dat pregled ostvarenih rezultata i doprinosa razvojem
sopstvenog reenja za zatitu podataka, kao i predlog za bududi rad.
40
Kristina Kunjadid-Dulibrk
Literatura
Kristina Kunjadid-Dulibrk
http://www.cs.mcgill.ca/~kaleigh/computers/crypto_rijndael.html.
[16] A. Kak, "Engineering Purdue," 2015. [Online]. Available:
https://engineering.purdue.edu/kak/compsec/NewLectures/Lecture15.pdf.
[17] R. L. Rivest, 1992. [Online]. Available: https://www.ietf.org/rfc/rfc1321.txt.
[18] Prof. dr Mladen Veinovid, M.Sc. Saa Adamovid, Kriptologija I, Beograd: Univerzitet
Singidunum, 2013.
[19] 2015. [Online]. Available: http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf.
[20] "msdn.microsoft," [Online]. Available: https://msdn.microsoft.com/enus/library/fx6bk1f4(v=vs.90).aspx.
[21] Prof. dr Milan Milosavljevid, Prof. dr Mladen Veinovid, Prof. dr Gojko Grubor,
Informatika, Beograd: Univerzitet Singidunum, 2013.
[22] Doc. dr Irina Branovid, Objektno orijentisano programiranje: C++, Beograd:
Univerzitet Singidunum, 2011.
[23] "msdn.microsoft," [Online]. Available: https://msdn.microsoft.com/en-us/en%20us/library/z1zx9t92.aspx.
[24] Doc. dr Saa Adamovid, Zatita informacionih sistema, Beograd: Univerzitet
Singidunum, 2015.
42
Kristina Kunjadid-Dulibrk
Dodatak 1
Prikaz koda funkcije EncryptFile, ranije pominjane u poglavlju 4.4.
public static void EncryptFile(string inputFile, string outputFile, string password)
{
string hash_fajl = "";
string uspesno = "0";
string curFile = @inputFile;
if (File.Exists(curFile) == true)
{
try
{
UnicodeEncoding UE = new UnicodeEncoding();
byte[] key = UE.GetBytes(password);
string cryptFile = outputFile;
FileStream fsCrypt = new FileStream(cryptFile, FileMode.Create);
RijndaelManaged RMCrypto = new RijndaelManaged();
CryptoStream cs = new CryptoStream(fsCrypt,
RMCrypto.CreateEncryptor(key, key),
CryptoStreamMode.Write);
FileStream fsIn = new FileStream(inputFile, FileMode.Open);
int data;
while ((data = fsIn.ReadByte()) != -1)
cs.WriteByte((byte)data);
fsIn.Close();
cs.Close();
fsCrypt.Close();
uspesno = "1";
try
{
string hash =
CryptoFile_byKristina.Hasher.GetSHA1Hash(inputFile).ToUpper();
hash_fajl = inputFile + ".hsh";
using (System.IO.StreamWriter file1 = new
System.IO.StreamWriter(@hash_fajl, true))
{
file1.WriteLine(hash);
file1.Close();
}
uspesno = "1";
}
43
Kristina Kunjadid-Dulibrk
catch
{
uspesno = "0";
}
key = null;
}
catch
{
uspesno = "0";
}
int brojac = 0;
string linija = "";
try
{
using (StreamReader dat_reader = new StreamReader(hash_fajl))
{
while ((linija = dat_reader.ReadLine()) != null)
{
brojac++;
}
}
if (brojac > 1)
{
uspesno = "0";
}
}
catch
{
}
}
if (File.Exists(curFile) == false)
{
uspesno = "0";
}
if (uspesno == "0")
{
MessageBox.Show("ifrovanje nije uspeno !",
"Upozorenje !",
MessageBoxButtons.OK,
MessageBoxIcon.Warning);
}
if (uspesno == "1")
{
MessageBox.Show("ifrovanje je uspeno !",
"Informacija !",
MessageBoxButtons.OK,
MessageBoxIcon.Information);
}
}
44
Kristina Kunjadid-Dulibrk
Dodatak 2
Prikaz koda funkcije DecryptFile, ranije pominjane u poglavlju 4.4.
public static void DecryptFile(string inputFile, string outputFile, string password)
{
string hash_fajl = "";
string uspesno = "0";
string curFile = @inputFile;
if (File.Exists(curFile) == true)
{
try
{
UnicodeEncoding UE = new UnicodeEncoding();
byte[] key = UE.GetBytes(password);
FileStream fsCrypt = new FileStream(inputFile, FileMode.Open);
RijndaelManaged RMCrypto = new RijndaelManaged();
CryptoStream cs = new CryptoStream(fsCrypt,
RMCrypto.CreateDecryptor(key, key),
CryptoStreamMode.Read);
FileStream fsOut = new FileStream(outputFile, FileMode.Create);
int data;
while ((data = cs.ReadByte()) != -1)
fsOut.WriteByte((byte)data);
fsOut.Close();
cs.Close();
fsCrypt.Close();
uspesno = "1";
try
{
string hash =
CryptoFile_byKristina.Hasher.GetSHA1Hash(outputFile).ToUpper();
hash_fajl = outputFile + ".hsh";
using (System.IO.StreamWriter file1 = new
System.IO.StreamWriter(@hash_fajl, true))
{
file1.WriteLine(hash);
file1.Close();
}
uspesno = "1";
}
catch
{
45
Kristina Kunjadid-Dulibrk
uspesno = "0";
}
key = null;
}
catch
{
uspesno = "0";
}
int brojac = 0;
string linija = "";
string linija_1 = "";
string linija_2 = "";
try
{
using (StreamReader dat_reader = new StreamReader(hash_fajl))
{
while ((linija = dat_reader.ReadLine()) != null)
{
if (brojac == 0)
{
linija_1 = linija;
}
if (brojac == 0)
{
linija_2 = linija;
}
brojac++;
}
}
if (brojac > 2)
{
uspesno = "0";
}
if (brojac < 2)
{
uspesno = "0";
}
if (linija_1 != linija_2)
{
uspesno = "0";
}
}
catch
{
uspesno = "0";
}
}
if (File.Exists(curFile) == false)
{
uspesno = "0";
46
Kristina Kunjadid-Dulibrk
}
if (uspesno == "0")
{
try
{
File.Delete(outputFile);
File.Delete(hash_fajl);
MessageBox.Show("Deifrovanje nije uspeno !",
"Upozorenje !",
MessageBoxButtons.OK,
MessageBoxIcon.Warning);
}
catch
{
MessageBox.Show("Deifrovanje nije uspeno !",
"Upozorenje !",
MessageBoxButtons.OK,
MessageBoxIcon.Warning);
}
}
if (uspesno == "1")
{
MessageBox.Show("Deifrovanje je uspeno !",
"Upozorenje !",
MessageBoxButtons.OK,
MessageBoxIcon.Warning);
}
}
47
Kristina Kunjadid-Dulibrk
Dodatak 3
Prikaz koda funkcije GetSHA1Hash, ranije pominjane u poglavlju 4.4.
public static string GetSHA1Hash(string pathName)
{
string strResult = "";
string strHashData = "";
byte[] arrbytHashValue;
System.IO.FileStream oFileStream = null;
System.Security.Cryptography.SHA1CryptoServiceProvider
oSHA1Hasher = new System.Security.Cryptography.SHA1CryptoServiceProvider();
try
{
oFileStream = GetFileStream(pathName);
arrbytHashValue = oSHA1Hasher.ComputeHash(oFileStream);
oFileStream.Close();
strHashData =
System.BitConverter.ToString(arrbytHashValue);
strHashData = strHashData.Replace("-", "");
strResult = strHashData;
}
catch
{
//System.Windows.Forms.MessageBox.Show(ex.Message,
"Error!", System.Windows.Forms.MessageBoxButtons.OK,
System.Windows.Forms.MessageBoxIcon.Error,
System.Windows.Forms.MessageBoxDefaultButton.Button1);
}
return(strResult);
}
48