20
Zavod sv. Stanislava Škofijska klasična gimnazija Izdelava Android aplikacije Dokumentacija Maturitetna seminarska naloga iz Informatike Avtor: Aleš Čebulj Mentor: Helena Starc Grlj Ljubljana Šentvid, marec 2020

Izdelava Android aplikacije - ARNESssljskg2s/2019_20/Cebulj_Ales/dokumentacija.pdf · Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20 10 9. Praktični del V nadaljevanju

  • Upload
    others

  • View
    18

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Izdelava Android aplikacije - ARNESssljskg2s/2019_20/Cebulj_Ales/dokumentacija.pdf · Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20 10 9. Praktični del V nadaljevanju

Zavod sv. Stanislava

Škofijska klasična gimnazija

Izdelava Android aplikacije

Dokumentacija

Maturitetna seminarska naloga iz Informatike

Avtor: Aleš Čebulj

Mentor: Helena Starc Grlj

Ljubljana Šentvid, marec 2020

Page 2: Izdelava Android aplikacije - ARNESssljskg2s/2019_20/Cebulj_Ales/dokumentacija.pdf · Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20 10 9. Praktični del V nadaljevanju

Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20

2

1. Povzetek

V seminarski nalogi je opisana izdelava aplikacije za Android, ki sem jo izdelal, da bi

različna gesla, ki jih potrebujem v življenju, imel shranjena na varen in urejen način. Aplikacija

uporabniku omogoča vnos gesla in le temu pripadajočih atributov in seveda tudi pregled vseh

gesel in podatkov ter njihovo urejanje. Aplikacija je narejena s pomočjo programa Android

Studio in sprogramirana v jeziku Java.

2. Abstract

In my project work is described the process of making an Android app, I made in order

to save different passwords I use on everyday basis. App allows the user to input his passwords

and their attributes and their overview and editing. App is made in Android Studio in program

language Java.

3. Ključne besede

Java, Json, Android, Android Studio, Programiranje

Page 3: Izdelava Android aplikacije - ARNESssljskg2s/2019_20/Cebulj_Ales/dokumentacija.pdf · Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20 10 9. Praktični del V nadaljevanju

Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20

3

4. Kazalo vsebine

1. Povzetek ............................................................................................................... 2

2. Abstract ................................................................................................................ 2

3. Ključne besede ..................................................................................................... 2

4. Kazalo vsebine ..................................................................................................... 3

5. Kazalo slik ........................................................................................................... 4

6. Stvarno kazalo ...................................................................................................... 4

7. Uvod ..................................................................................................................... 5

7.1 Vpeljevanje v problem ..................................................................................... 5

7.2 Predstavitev problema ...................................................................................... 6

8. Teoretična rešitev ................................................................................................. 7

8.1 Kriptografija ..................................................................................................... 7

8.2 Prijava v aplikacijo ........................................................................................... 7

8.3 Dodajanje gesla ................................................................................................ 8

8.4 Shranjevanje podatkov ..................................................................................... 8

8.5 Branje podatkov ............................................................................................... 8

8.6 Potrebno znanje ................................................................................................ 9

9. Praktični del ....................................................................................................... 10

9.1 Android Studio ............................................................................................... 10

9.2 Activity - grafika ............................................................................................ 11

9.3 Activity – logični del ...................................................................................... 13

9.4 Json struktura.................................................................................................. 15

9.5 Ikona ............................................................................................................... 16

9.6 Testiranje ........................................................................................................ 17

9.7 Namestitev aplikacije ..................................................................................... 17

10. Zaključek............................................................................................................ 18

10.1 Evaluacija opravljenega dela in izboljšave ................................................. 18

10.2 Porabljen čas ............................................................................................... 19

11. Literatura ............................................................................................................ 20

Page 4: Izdelava Android aplikacije - ARNESssljskg2s/2019_20/Cebulj_Ales/dokumentacija.pdf · Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20 10 9. Praktični del V nadaljevanju

Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20

4

5. Kazalo slik

Slika 1: Skica prijave ..................................................................................................... 8

Slika 2: Skica dodajanja gesla ........................................................................................ 8

Slika 3: Skica branja podatkov ...................................................................................... 9

Slika 4: Ključne datoteke aplikacije ............................................................................ 10

Slika 5: Primer .xml datoteke....................................................................................... 11

Slika 6: Grafični urejevalnik ........................................................................................ 12

Slika 7: Primer .java datoteke ...................................................................................... 13

Slika 8: Primer JSON strukture.................................................................................... 16

Slika 9: Ikona izdelana s programom Inkscape .......................................................... 16

Slika 10: Izgled aplikacije ............................................................................................ 19

6. Stvarno kazalo

algoritem, 4, 7, 18

Android, 1, 2, 3, 4, 5, 6, 9, 10, 13, 14, 15,

16, 17, 20

gcm, 4

hash, 4, 7, 15

java, 4, 10, 13, 18

json, 4

kriptografija, 4, 5, 9, 18

sol, 4, 7

xml, 4, 9, 10, 13, 18

Page 5: Izdelava Android aplikacije - ARNESssljskg2s/2019_20/Cebulj_Ales/dokumentacija.pdf · Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20 10 9. Praktični del V nadaljevanju

Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20

5

7. Uvod

7.1 Vpeljevanje v problem

Sem uporabnik veliko programov, družabnih omrežij ipd. in vsak od teh zahteva

uporabniško ime in geslo. Tega je veliko in moja prva rešitev je bila, da sem za večino

uporabljal ista gesla. Pred nekaj časa pa sem se začel zanimati za kriptografijo in ugotovil sem,

da je to izredno nevarno. Najboljše je imeti geslo čimbolj komplicirano in vedno drugačno.

Sedaj imam gesla zapisana na svojem računalniku, na telefon pa si jih ne upam zapisati, saj

imam zelo preprosto geslo za telefon in ga večino časa nimam pri sebi. Tako se bojim, da bi

kdo ugotovil moja gesla. Zato sem se odločil, da izdelam aplikacijo, v katero bom lahko varno

vpisoval vsa gesla.

Pri tej aplikaciji je pomemba preglednost in enostavnost za uporabo. Najbolj

pomembna pri tej aplikaciji pa je varnost samih podatkov. V skladu z lastnimi željami in

estetiko designa sem zasnoval osemmestno številsko kodo (10^8 možnosti), ki jo mora

uporabnik vnesti za vstop v aplikacijo.

Programiranje Android aplikacij sem že dobro poznal in želel sem izdelati nekaj

praktičnega. Izkušenj s tega področja, predvsem s področja baz podatkov, sem imel že kar

nekaj, nova pa je bila zame kriptografija, za katero sem se v prejšnjem šolskem letu začel

močno zanimati.

Tabela 1: Strojna oprema

Komponenta Programska oprema

računalnik HP Z440

procesor Intel Xeon CPU E5-1620 v3

RAM 16 GB

disk 237 GB SSD + 1,81 TB hard drive

telefon Samsung A6+

Page 6: Izdelava Android aplikacije - ARNESssljskg2s/2019_20/Cebulj_Ales/dokumentacija.pdf · Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20 10 9. Praktični del V nadaljevanju

Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20

6

Tabela 2: Programska oprema

Programska oprema Vrsta programa

Windows 10 operacijski sistem

Java JDK-9.0.1 programski jezik

Android Studio 3.0.1 urejevalnik kode

Filezilla povezovalnik s strežnikom

Google Chrome brskalnik

Word urejevalnik besedil

Inkscape grafični program

Atom urejevalnik kode

Notepad++ urejevalnik kode

7.2 Predstavitev problema

Aplikacija vsebuje naslednje elemente in funkcije:

• prijava v aplikacijo in določitev kode ob prvi prijavi,

• vstop v aplikacijo s to kodo,

• zamenjava kode,

• vpis gesla ali beležke,

• pri geslu možnost vpisa naslova, uporabniškega imena, gesla in opomb in

• pregled shranjenih gesel/beležk in njihovo urejanje.

Ključna pri tej aplikaciji je predvsem varnost podatkov. Preprost pregled podatkov, kar

je sicer prvotni namen aplikacije, je dosežen že s kodo, ki jo je treba vnesti za vstop v aplikacijo.

Podatki morajo biti varni tudi pred bolj naprednimi poskusi vdora. Tako sem moral natančno

preučiti sodobne načine kriptiranja podatkov, ki so sicer večinoma vsi na voljo brezplačno. Gre

namreč za matematične algoritme, ki jih uporablja ves svet in so bili razviti za širšo svetovno

javnost.

Page 7: Izdelava Android aplikacije - ARNESssljskg2s/2019_20/Cebulj_Ales/dokumentacija.pdf · Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20 10 9. Praktični del V nadaljevanju

Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20

7

8. Teoretična rešitev

Program, ki ga bom izdelal, bo sestavljen iz več funkcij, ki bodo potrebne za pravilno

delovanje programa in shranjevanje gesel. Vse te dele programa bom v nadaljevanju tudi

opisal.

8.1 Kriptografija

Prvi pomembi korak pri varovanju podatkov je že omenjena uporaba HASH-a. Hash

je zgoščevalni algoritem, ki za argument jemlje poljubno dolgo sporočilo in ga pretvori v

binarno vrednost fiksne dolžine. Povedano drugače iz moje osemmestne kode naredi

popolnoma nerazumljiv niz. Pomembna lastnost hash-a je, da je algoritem popolnoma javno

dostopen in vsak lahko pretvori v eno smer, matematično nemogoče pa je poiskati inverzno

funkcijo. To pomeni, da tudi če nekdo dobi hash, mu to ne pomaga, saj mora še vedno ugibati

kodo in jo nato primerjati s hash-om, da ugotovi ali je prava ali ne.

Drugi korak je uporaba sinhronične kriptografije. To je postopek, ki s pomočjo

algoritma (navadno znanega) pretvori sporočilo v kriptirano besedilo. Poleg prvotnega

sporočila potrebuje algoritem še ključ (ki je obvezno skriven) in postopek lahko obrnemo in

iz zakodiranega besedila s pomočjo ključa ugotovimo prvotno sporočilo.

Tretji postopek, ki ga bom uporabljal v vseh korakih, je dodajanje »soli«. To pomeni,

da se npr. prvotni kodi (npr. 12345678) doda še dodaten niz znakov (npr. abcdefgh) in se

nato novi niz prevede v hash. Sol je v moji aplikaciji statična, kar pomeni, da je zapisana

nekje v kodi (ki je nepooblaščena oseba načeloma ne more dobiti). Soljenje še dodatno

poveča varnost, saj če napadalec pozna hash in želi ugotoviti kodo, ki ni soljena, ima 10^8

možnosti, če pa se doda še sol in je napadalec ne pozna, pa je možnosti seveda še veliko

veliko več.

8.2 Prijava v aplikacijo

Pri prvi uporabi aplikacije si bo uporabnik moral izbrati osemmestno kodo,

sestavljeno iz številk od 0 do 9. To pomeni, da ima uporabnik na voljo 100000000 možnosti.

Številsko kodo sem si izbral zaradi boljšega izgleda aplikacije in ker je za moje potrebe

osemmestno geslo popolnoma dovolj varno. Temu geslu se doda še statična sol, ki jo

sestavlja osem naključnih znakov iz UNICODE kodne tabele. Iz gesla in soli se nato tvori

»hash« in sicer z algoritmom sha256, ki je trenutno najbolj sodoben tovrstni algoritem. Ob

vsakem naslednjem vstopu v aplikacijo mora uporabnik ponovno vpisati geslo in program

nato iz njega tvori »hash«, ki ga nato primerja s shranjenim (iz prve prijave).

Page 8: Izdelava Android aplikacije - ARNESssljskg2s/2019_20/Cebulj_Ales/dokumentacija.pdf · Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20 10 9. Praktični del V nadaljevanju

Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20

8

Slika 1: Skica prijave

8.3 Dodajanje gesla

Uporabnik si bo lahko izbral ali bo shranil geslo ali beležko. Če bo izbral geslo, bo

vpisal naslov, uporabniško ime, geslo in opombe. Naslov in geslo sta obvezna. Pri

shranjevanju beležke pa sta uporabniku na voljo naslov in besedilo. Ko uporabnik pritisne

na gumb za shranjevanje, se vsa polja razen naslova obdelajo s sinhroničnimi kriptografskimi

algoritmi (AES-GCM). Za ključ se uporablja ključ (le ta je v aplikaciji zapisan le v času, ko

je aplikacija odprta), ki ga iz statične 20 mestne soli in gesla za vstop v aplikacijo generira

sodoben in zanesljiv »secret key generator« s 1000 ponovitvami.

Slika 2: Skica dodajanja gesla

8.4 Shranjevanje podatkov

Vsi podatki vključno z »hashom« se zapišejo v navadni tekstovni datoteki JSON tipa.

Datoteka je shranjena tako, da do nje lahko dostopa le aplikacija. Ta datoteka doseže izredno

majhne velikosti in je po mojem mnenju boljša izbira kot pa integracija bolj kompleksne

SQL tabele.

8.5 Branje podatkov

Ob vstopu v aplikacijo se iz JSON datoteke preberejo naslovi in tipi shranjenih

podatkov in se izpišejo v obliki seznama. Ob kliku nanje program prebere še ostale atribute

in jih dešifrira, tako da so uporabni za uporabnika.

Page 9: Izdelava Android aplikacije - ARNESssljskg2s/2019_20/Cebulj_Ales/dokumentacija.pdf · Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20 10 9. Praktični del V nadaljevanju

Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20

9

Slika 3: Skica branja podatkov

8.6 Potrebno znanje

Za izdelavo takšne aplikacije moram poznati programski jezik Java, JSON strukturo,

jezik (strukturo) xml za grafični del, kriptografijo in arhitekturo pomnilnika android telefona.

Za kriptografijo bom uporabljal že razvite algoritme in jih bom tako moral le še integrirati v

svoj program. Nova stvar, ki se je moram naučiti, je kriptografija. Le z dobrim znanjem

celotne kriptografije se bom lahko odločil za varne rešitve, ki bodo ohranila moja gesla

popolnoma varna.

Page 10: Izdelava Android aplikacije - ARNESssljskg2s/2019_20/Cebulj_Ales/dokumentacija.pdf · Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20 10 9. Praktični del V nadaljevanju

Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20

10

9. Praktični del

V nadaljevanju bom opisal in razlagal le ključne odstavke iz kode, saj že samo javanski

(logični) del kode obsega preko 2500 vrstic. Koda je poleg javanskega dela sestavljena še iz

xml datotek, v katerih so zapisani podatki kako naj aplikacija grafično izgleda.

9.1 Android Studio

Izdelave svoje aplikacije sem se lotil v programu Android Studio, ki je brezplačno

dostopen na internetu. Uporabil sem zadnjo verzijo (3.0.1), seveda pa je za delovanje potrebno

imeti na računalniku naloženo Javo. Android Studio je uporabniku precej prijazen program in

ko ustvarimo novo aplikacijo, že sam izdela vse za delovanje ključne datoteke, kot sta npr.:

Gradle Scripts in Manifest. Nato pa uporabnik sam začne izdelovati program. Aplikacija je v

prvi razdelitvi zgrajena iz t.i. Activity-jev,

ki so v resnici različni zasloni. So kot

različni zavihki oz. deli strani pri spletnih

straneh. Vsak Activity je sestavljen iz dveh

delov: iz datoteke .java in datoteke .xml. V

prvi je zapisana logika (kaj naj Activity

počne) v drugem pa kako naj Activity

izgleda. Vse te datoteke Android Studio

izdela samodejno. Uporabnik lahko nato še

dodaja poljubne javanske datoteke, če jih

potrebuje. Aplikacija vsebuje tudi druge

datoteke, kot so npr. datoteke v mapi res

(resources), ki so potrebne za ikono, za

različne slike, za različna besedila (lahko

tudi v več jezikih).

Slika 4: Ključne datoteke aplikacije

Page 11: Izdelava Android aplikacije - ARNESssljskg2s/2019_20/Cebulj_Ales/dokumentacija.pdf · Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20 10 9. Praktični del V nadaljevanju

Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20

11

9.2 Activity - grafika

V tem delu bol opisal primer datoteke, ki kodira grafični del nekega Activitiy-ja.

Slika 5: Primer .xml datoteke

Page 12: Izdelava Android aplikacije - ARNESssljskg2s/2019_20/Cebulj_Ales/dokumentacija.pdf · Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20 10 9. Praktični del V nadaljevanju

Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20

12

Xml datoteke lahko urejamo grafično (slika 3) ali pa datoteko kodiramo »ročno«. Sam

najraje pišem kodo ročno in nato v urejevalniku vidim ali je rezultat zadovoljiv ali ne. V spodnji

tabeli bom predstavil kodo, ki opisuje gumb SHRANI, ki je viden na sliki 3.

Tabela 3: Razlaga kode

<Button

android:id="@+id/addItemActivitySaveButton"

android:layout_width="wrap_content"

android:layout_height="35dp"

android:layout_alignParentEnd="true"

android:layout_centerVertical="true"

android:layout_marginEnd="2dp"

android:background="@drawable/border_rectangle"

V prvi vrstici določimo kakšen

element opisujemo. V tem

primeru gre za gumb. Nato

določimo atribute. Določimo

(vrstica 2) id, nato širino in

višino in postavitev na strani

(parent). V tem primeru sem še

Slika 6: Grafični urejevalnik

Page 13: Izdelava Android aplikacije - ARNESssljskg2s/2019_20/Cebulj_Ales/dokumentacija.pdf · Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20 10 9. Praktični del V nadaljevanju

Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20

13

android:text="shrani"

android:textColor="@color/primaryTextColor"

android:textSize="16sp" />

določil posebno ozadje (ki ga

je potrebno definirati v drugi

datoteki). Nato sem določil še

besedilo.

9.3 Activity – logični del

Vsak Activity ima obvezno svojo .java datoteko, v kateri obstajajo obvezne metode

(ustvari jih že Android Studio). Taka metoda je onCreate, ki določi v glavni zanki tudi .xml

datoteko, ki naj se pokaže ob začetku delovanja Activity-ja.

Slika 7: Primer .java datoteke

Slika 4 prikazuje del datoteke, ki zapisuje logični del Activity-ja, katerega grafični del sem

predstavil pod sekcijo 8.2. Pisanje kode je v Android Studiu močno olajšano, saj uporabniku

Page 14: Izdelava Android aplikacije - ARNESssljskg2s/2019_20/Cebulj_Ales/dokumentacija.pdf · Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20 10 9. Praktični del V nadaljevanju

Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20

14

pomaga »autocorrect« in program že sam dela zamike in zelo dobro predvideva kaj želiš

narediti in to močno pohitri. Uporabniku dobro pomaga tudi zaznavanje napak.

V spodnji tabeli bom opisal del kode, ki shrani geslo:

Tabela 4: Primer metode iz moje kode

//shrani geslo

private boolean savePasswordData() {

//dobi vse vpisane podatke

title = titleText.getText().toString();

username =

usernameText.getText().toString();

password =

passwordText.getText().toString();

notes = notesText.getText().toString();

//preveri če so vpisani vsi potrebni

podatki

if (!title.equals("") &&

!password.equals("")) {

String date = new

SimpleDateFormat("yyyyMMdd_HHmmss",

Locale.getDefault()).format(new Date());

JSONObject jsonObject = new

JSONObject();

//dobi ključ

int mySecureKey =

((MyGlobalVariables)

this.getApplication()).getMyKey();

//vsi podatki se zakodirajo s

pomočjo metode iz drugega razreda

date = new

String(aesCryptography.encryptData(date,

mySecureKey, true),

StandardCharsets.ISO_8859_1);

username = new

String(aesCryptography.encryptData(username,

mySecureKey, true),

StandardCharsets.ISO_8859_1);

password = new

String(aesCryptography.encryptData(password,

mySecureKey, true),

StandardCharsets.ISO_8859_1);

notes = new

String(aesCryptography.encryptData(notes,

mySecureKey, true),

StandardCharsets.ISO_8859_1);

mySecureKey = 0;

//vse podatke doda v Json objekt

try {

Koda je že nekoliko opisana s

komentarji, katerih začetek je

označen z: //

Metoda najprej dobi podatke. Že

obstoječo spremenljivko tipa

String na novo določimo in sicer iz

spremenljivke titleText dobimo

besedilo in ga pretvorimo v String.

To ponovimo še pri drugih.

If stavek preveri, če sta vnesena

naslov in geslo.

Če sta, kriptira vse podatke razen

naslova (zaradi lažjega dela pri

branju podatkov) in jih shrani v

Json objekt.

Za shranjevanje v Json objekt je

potrebna »try – catch« struktura.

Page 15: Izdelava Android aplikacije - ARNESssljskg2s/2019_20/Cebulj_Ales/dokumentacija.pdf · Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20 10 9. Praktični del V nadaljevanju

Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20

15

jsonObject.put("dataType",

"password");

jsonObject.put("date", date);

jsonObject.put("title", title);

jsonObject.put("username",

username);

jsonObject.put("password",

password);

jsonObject.put("notes", notes);

} catch (JSONException e) {

e.printStackTrace();

}

//kliče drugo metodo

putJsonObject(jsonObject);

//zaključi to metodo

return true;

} else {

Toast.makeText(this, "Vsa polja

morajo biti izpolnjena.",

Toast.LENGTH_LONG).show();

return false;

}

}

Ko je objekt postavljen, kličem

drugo metodo (funkcijo) z in za

argument pošljem ta objekt. Nato

zaključim metodo.

Če vsa potrebna polja niso

izpolnjena, se uporabniku na

zaslonu pojavi »toast«.

9.4 Json struktura

Json je ime preproste tekstovne datoteke, v kateri so podatki shranjeni hierarhično,

podobno kot je za relacijsko urejena baza datoteka v formatu csv. Za ta model sem se odločil,

ker ga Android dobro podpira in tekstovna datoteka porabi zelo malo prostora. Moja baza

podatkov je urejena tako, da so na najvišji ravni shranjeni ime, priimek, hash in nato še polje z

vsemi gesli oz. besedili. Vsak od teh objektov ima še naprej določene atribute, kot so tip,

naslov, datum (za katerega lahko rečemo, da je ključ), geslo, uporabniško ime ter opombe (oz.

besedilo pri beležki).

Za demonstracijo sem v Notepad++ izdelal primer moje podatkovne baze z geslom

(glavna osemmestna koda) 12345678 in z le enim shranjenim geslom. To prikazuje slika 5. Na

sliki 5 je zapisan hash glavnega gesla brez soli in tudi podatki gesla (z naslovom test1) niso

zakodirani. Spodaj pa je prikazano, kako v resnici (po soljenju in kodiranju) izgleda takšna

datoteka:

{"name":"Aleš","surname":"Čebulj","password":"18d90aeab8bd72198d37c8198442b

5b353011c83faa1bef07dfbec5383b6d451","dataArray":[{"dataType":"password","d

ate":"\u0018fQ\u0006\u001a´n§��²í�k¹n©T\u00157ÇÛ�?e\\º#ç�«","title":"test

1","username":"K:\u0006Eg\u0015»�1ë�tÐ�¥L[ü\u001dþ","password":"K4\u0000\u

0007\u0018´J9�í�]��\u001c\u0007n_Ú×

Page 16: Izdelava Android aplikacije - ARNESssljskg2s/2019_20/Cebulj_Ales/dokumentacija.pdf · Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20 10 9. Praktični del V nadaljevanju

Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20

16

\r","notes":"^9C\\O§1òáÂõ·Ä;óþKÕUh¨Ý1@�ª1\u0000ͬhñ!�*þ¡þ:xÑ{T�Êom2 ô

ña躻��\u0005óÁu��,"}]}

Slika 8: Primer JSON strukture

9.5 Ikona

Odločil sem se tudi, da bom za aplikacij izdelal preprosto ikono. Za to sem se odločil,

ker sem aplikacijo izdelal za dejansko uporabo in ikona je še zadnji detajl, ki ni obvezen, je pa

zelo lep dodatek. Za izdelavo sem uporabil program Inkscape, ki je prosto dostopen in je

odlično orodje za vektorsko grafiko. Pri izdelavi sem sledil uradnim priporočilom, ki so

objavljeni na spletni strani developer.android.com.

Slika 9: Ikona izdelana s programom Inkscape

Page 17: Izdelava Android aplikacije - ARNESssljskg2s/2019_20/Cebulj_Ales/dokumentacija.pdf · Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20 10 9. Praktični del V nadaljevanju

Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20

17

9.6 Testiranje

Aplikacijo sem testiral že med samim razvojem aplikacije. Android Studio ima možnost

uporabe t.i. emulatorja, ki je navidezni Android telefon na računalniku. Testiranje sem začel

najprej na emulatorju, pozneje pa sem testiral še na svojem telefonu. Android Studio omogoča

zagon nove verzije na telefonu, ne da bi ta povozila prejšnjo in izbrisala že shranjene podatke.

Studio ima tudi odlično možnost uporabe razhroščevalca (debuger), ki deluje zelo dobro in mi

je močno pomagal pri delu. Na koncu sem naredil tudi podpisano »release« verzijo .apk

datoteke.

9.7 Namestitev aplikacije

V fazi testiranja sem imel Android Studio nastavljen na način »debug« in sem tako

lahko aplikacijo zagnal na telefonu (ki je bil seveda fizično povezan z računalnikom). Ko pa

sem zaključil, sem to aplikaciji izbrisal in jo znova namestil z release .apk datoteko. Namestitev

je preprosta: kopijo .apk datoteke premestimo v pomnilnik telefona, nato pa jo v raziskovalcu

(na telefonu) poiščemo in odpremo. Telefon nas najprej vpraša, če dovolimo temu viru, da

inštalira aplikacijo (privzeto sprejema le aplikacije iz trgovine Google Play). Ko to dovolimo,

se program inštalira (nekaj sekund) in aplikacija je naložena. Nato jo uporabnik le še poišče, jo

odpre, vpiše svoje ime in priimek ter vnese svoje geslo (dvakrat).

Page 18: Izdelava Android aplikacije - ARNESssljskg2s/2019_20/Cebulj_Ales/dokumentacija.pdf · Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20 10 9. Praktični del V nadaljevanju

Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20

18

10. Zaključek

10.1 Evaluacija opravljenega dela in izboljšave

Po mojem mnenju sem nalogo, ki sem si jo zadal na začetku, dobro opravil. Glavni cilji

so po mojem mnenju doseženi. Aplikacija izgleda estetsko zadovoljivo, prav tako ikona.

Aplikacija je uporabniku prijazna in enostavna za uporabo. Edina pomanjkljivost je, da nisem

vgradil tudi brskalnika po shranjenih geslih in tako uporabnik lahko le išče po seznamu.

Zaenkrat mi to sicer še ustreza, v prihodnosti pa bom morda dodal tudi to funkcijo. Drugače pa

je aplikacija odlična in jo dejansko uporabljam že odkar sem jo izdelal. Tudi kriptografija

očitno deluje (kar lahko vidimo v odseku 8.4) in sem precej samozavesten, da mi kode nihče

ne bo razbil. Mislim sicer, da to ni nemogoče, toda potrebno bi bilo veliko dela in znanja.

Moj način šifriranja bi se sicer dalo razbiti na sledeč način:

1. Nekdo bi mi moral fizično ukrasti telefon in ugotoviti geslo ali pa nekako prek

omrežja vdreti vanj.

2. Nato bi moral narediti »root« telefona, kar pomeni, da bi dobil dostop do vseh

prej nevidnih datotek na telefonu. Takšna je tudi datoteka z mojimi gesli.

3. Datoteko bi moral kopirati na svoj računalnik.

4. Pridobiti, bi moral apk moje aplikacije in iz nje nekako dobiti mojo kodo (.java

in .xml), kar je sicer komplicirano, toda kolikor vem, je možno.

5. Iz moje kode pridobi vse soli, ki jih uporabljam in s preprosto zanko nato

preizkusiti največ 10^8 možnosti in tako ugotoviti mojo kodo.

6. Nato pa bi preprosto s to kodo dešifriral podatke.

7. Lahko pa bi se samo poskusil osredotočiti na moj GCM algoritem, kjer sem

naredil napako in za začetni vektor (IV) uporabil kar konstanto. To sem storil

zato, ker sem imel ogromne probleme z pridobivanjem IV-ja nazaj iz šifriranega

teksta. IV bi moral namreč generirati vsakič znova in ga pripeti na šifrirano

besedilo in ga pridobiti nazaj pri dešifriranju. To bom morda v prihodnosti

poskusil še popraviti.

Mislim, da je na področju kriptografije, ki sem jo uporabljal, še nekaj možnih izboljšav.

Morda glavna stvar, ki bi (jo bo) treba popraviti, je prenos teh gesel ob menjavi telefona. Poleg

tega bi bilo treba ustvariti tudi način za backup. O tem sem že razmišljal in sem tudi izdelal

možnost izvoza datoteke, toda ne vem kako točno bi to potem uporabil na drugem telefonu.

Page 19: Izdelava Android aplikacije - ARNESssljskg2s/2019_20/Cebulj_Ales/dokumentacija.pdf · Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20 10 9. Praktični del V nadaljevanju

Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20

19

Slika 10: Izgled aplikacije

10.2 Porabljen čas

Grafikon 1: Porazdelitev časa

Porabljen čas (ure)

zbirnje idej in pridobivanje znanja programiranje

testiranje in poravljanje design

dokumentacija

Page 20: Izdelava Android aplikacije - ARNESssljskg2s/2019_20/Cebulj_Ales/dokumentacija.pdf · Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20 10 9. Praktični del V nadaljevanju

Izdelava Android aplikacije Aleš Čebulj, šolsko leto 2019/20

20

11. Literatura

• Documentation for app developers (online), [Uporabljeno dne 25.3.2020]

Dostopno na https://developer.android.com/docs

• Material design (online), [Uporabljeno dne 25.3.2020] Dostopno na

https://material.io/

• Peter Smirnoff & Dawn M. Turner, Symmetric Key Encryption (online),

[Uporabljeno dne 25.3.2020] Dostopno na

https://www.cryptomathic.com/news-events/blog/symmetric-key-encryption-

why-where-and-how-its-used-in-banking

• Margaret Rouse, asymmetric cryprtography (online), [Uporabljeno dne

25.3.2020] Dostopno na

https://searchsecurity.techtarget.com/definition/asymmetric-cryptography

• Wechtersbach, Rado: INFORMATIKA, učbenik za srednje izobraževanje,

Založba Saji, Grosuplje, 2005