Šifrování/Dešifrování s použitím hesla



Podobné dokumenty
Implementace numerických metod v jazyce C a Python

1. Uživatelská úprava příkazů I.

Pokud nebude na příkazové řádce uveden právě jeden argument, vypište chybové hlášení a stručný

Lekce 9 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

Semestrální práce KIV/PC Řešení kolizí frekvencí sítě vysílačů Zdeněk Bečvář A14B0466P 10. ledna 2016

Operační systémy Linux, Mac OS X a jejich srovnání

TMU. USB teploměr. Teploměr s rozhraním USB. Měření teplot od -55 C do +125 C. 6. května 2011 w w w. p a p o u c h. c o m

Automatický přenos dat z terminálů BM-Finger

Operační systémy 2: Zápočtové úkoly

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

int => unsigned int => long => unsigned long => float => double => long double - tj. bude-li:

Pivovar Chmelokvas. KIV/PT Semestrální práce

Základy jazyka C. Základy programování 1 Martin Kauer (Tomáš Kühr)

Základy programování (IZP)

Pointery II. Jan Hnilica Počítačové modelování 17

HP Backup and Recovery Manager

Příručka k programu Wkasa Restaurační verze

Základy programování (IZP)

Základy jazyka C. Základy programování 1 Tomáš Kühr

Motivace. Vstup a výstup. Minimální komunikace. Motivace. ÚDPJ - Vstup a výstup. Ing. Lumír Návrat katedra informatiky, A

Databázový systém Matylda

Základy programování (IZP)

Elektronická dokumentace - LATEX. Maticové operace

software Ruční měřicí přístroje Zobrazovače / Regulátory Loggery / EASYBus GDUSB FastView EASYControl net EASYBus Configurator GSOFT 3050 GSOFT 40k

Příručka k programu Wkasa Obchodní verze

Uživatelská příručka

Principy operačních systémů. Lekce 3: Virtualizace paměti

Programování v Javě I. Leden 2008

TMU. USB teploměr. teploměr s rozhraním USB. měření teplot od -55 C do +125 C. 26. května 2006 w w w. p a p o u c h. c o m

Struktura programu v době běhu

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Principy operačních systémů. Lekce 7: Souborový systém

2 Základní funkce a operátory V této kapitole se seznámíme s použitím funkce printf, probereme základní operátory a uvedeme nejdůležitější funkce.

Operační systém UNIX

Programování v Javě I. Únor 2009

Systémová volání Mgr. Josef Horálek

Obsah. Část I Začínáme s jazykem AppleScript

Obsah. Začínáme pracovat v InventorCAMu - frézování SolidCAM All Rights Reserved.

Maturitní otázky z předmětu PROGRAMOVÁNÍ

IUJCE 07/08 Přednáška č. 1

ADT/ADS = abstraktní datové typy / struktury

Semestrální projekt. Předmět: Programování v jazyce C. Zadání: Operace s maticemi. Uživatelský manuál. ver. 1.0

Manuál administrátora FMS...2

Uživatelská příručka Evidence příchozí a odchozí pošty a elektronický archiv. V prostředí společnosti. Pražská vodohospodářská společnost a.s.

UŽIVATELSKÁ PŘÍRUČKA PRO IZR NA PORTÁLU FARMÁŘE - HLÁŠENÍ POHYBŮ A OBJEDNÁVKY UZ

Záznamník teploty ZT, ZT1ext Návod k použití

Digitální paměťový osciloskop (DSO)

Další aspekty architektur CISC a RISC Aktuálnost obsahu registru

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické

Jazyk C práce se soubory. Jan Hnilica Počítačové modelování 16

Klíčové pojmy: Cyklus, řídící proměnná, inicializace, test podmínky, přerušení cyklu, vnořování cyklů.

8. lekce Úvod do jazyka C 3. část Základní příkazy jazyka C Miroslav Jílek

Zdroj:

PROGRAMOVÁNÍ MIKROPOČÍTAČŮ CVIČENÍ 10

MAPOVÉ OKNO GSWEB. Nápověda. Pohyb v mapovém okně Výběr v mapovém okně. Panel Ovládání Panel Vrstvy. Tisk Přehledová mapa Redlining Přihlásit jako

NPRG030 Programování I 3/2 Z --- NPRG031 Programování II --- 2/2 Z, Zk

Operační systémy. Cvičení 5: Volání jádra, procesy, vlákna.

BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky

E.C.S. řada nová generace obrat o 360 ( Systém vyvinut ve Florencii v r.2009 )

- jak udělat konstantu long int: L long velka = 78L;

Lekce 25 IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ

Tato tematika je zpracována v Záznamy přednášek: str materiál: PrikladyZobrazeniCisel.pdf

Semestrální práce z KIV/PC. Kolja Matuševský (A14B0310P)

MATLAB základy. Roman Stanec PEF MZLU

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. December 7, 2016

Paměť počítače. alg2 1

Projektč.3dopředmětuIZP. Maticové operace

Doňar B., Zaplatílek K.: MATLAB - tvorba uživatelských aplikací, BEN - technická literatura, Praha, (ISBN:

Instalace a konfigurace OpenAdmin tool na M$ a Linuxu

1280x 720 (HD Resolution, AVI format)

Operační systémy. Přednáška 8: Správa paměti II

ZÁKLADY PRÁCE S PROHLÍŽEČEM

MLE2 a MLE8. Datalogery událostí

Semestrální projekt z předmětu Testování uživatelského rozhraní. Testování bez uživatele. Testování SmartPhone HTC 7 Trophy

Základy programování (IZP)

ZPRACOVÁNÍ NEURČITÝCH ÚDAJŮ V DATABÁZÍCH

Provozní dokumentace. Seznam orgánů veřejné moci. Příručka pro administrátora krizového řízení

GRAFICKÁ PROSTŘEDÍ GNU/LINUXU

Operační systémy 2. Přednáška číslo 2. Přidělování paměti

Základy programování (IZP)

Průvodce snadnou obsluhou

GREEN BUTTON SOFTWARE

10 Algoritmizace Příklad 2 Word 2007/ VBA

Vývoj, výroba, prodej a montáž docházkových a identifikačních systémů

ALFIS 2014 komplexní ekonomický systém verze

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

sssssssssssssssssssssssssssssssssssssssssssssssssss UŽIVATELSKÁ PŘÍRUČKA ELEKTRONICKÁ PODATELNA - WEBOVÁ ČÁST APLIKACE Verze distribuce:

MIDAM Verze 1.1. Hlavní okno :

AVG_ANTIVIR. Semestrální projekt předmětu Návrh uživatelských rozhraní Julie Partyková, Ondřej Mirtes,

BI-PA1 Programování a algoritmizace 1, ZS Katedra teoretické informatiky

Jazyk C++, některá rozšíření oproti C

NÁKUPNÍ SOFTWARE. uživatelská příručka pro dodavatele

Záznamník teploty a relativní vlhkosti Návod k použití

Ing. Igor Kopetschke TUL, NTI

eliška 3.04 Průvodce instalací (verze pro Windows 7) w w w. n e s s. c o m

PowerSwitch ver. 1.6

Program Montážky manuál uživatele

Formátové specifikace formátovací řetězce

KTE / PPEL Počítačová podpora v elektrotechnice

Transkript:

Fakulta elektrotechnická Katedra teoretické elektrotechniky Dokumentace k semestrální práci Šifrování/Dešifrování s použitím hesla 2012/13 Petr Zemek Vyučující: Ing. Petr Kropík, Ph.D Předmět: Základy programování pro elektroniku

Obsah 1 Zadání semestrální práce 3 1.1 Název..................................... 3 1.2 Stručné zadání................................ 3 1.3 Celé zadání.................................. 3 2 Analýza úlohy 4 2.1 (De)Šifrování................................. 4 2.2 Dekompozice programu........................... 4 2.3 Vyhodnocování vstupu............................ 5 2.4 Načítání vstupního řetězce ze souboru................... 5 2.5 Šifrování.................................... 5 2.6 Dešifrování.................................. 5 2.7 Výpis výstupu................................. 5 3 Popis implementace 6 3.1 Přenositelnost................................. 6 3.2 Datové struktury a správa paměti...................... 6 3.3 Popis algoritmů................................ 6 4 Uživatelská příručka 8 4.1 Překlad zdrojových kódů........................... 8 4.2 Spuštění a obsluha.............................. 8 4.3 Ukázky běhu programu........................... 9 5 Závěr 11 5.1 Výkonnost programu............................. 11 5.2 Kódování zdrojových souborů........................ 11 5.3 Důvod využívání menších datových typů.................. 11 5.4 Vysvětlení nestandardních konstrukcí.................... 11 2

1 Zadání semestrální práce 1.1 Název Šífrování/Dešífrování s použitím hesla 1.2 Stručné zadání Napište program v jazyce C: jednoduché šifrování a dešifrování s využitím heslavytvořte program, který dokáže šifrovat a dešifrovat pomocí jednoduché šifry. Ovládání programu umožněte pomocí jednoduchého menu. Umožněte načtení dat z klávesnice nebo ze souboru. Program musí obsahovat alespoň jednu uživatelskou funkci a musí být ošetřen proti chybným vstupům. Výstup programu umožněte do souboru nebo na obrazovku. Uživatel zvolí, jestli chce použít režim šifrování či dešifrování (dále jen Š/D). Vytvořte v paměti pole znaků (řetězec), který bude Š/D a řetězec do kterého uložíte heslo. Program bude Š/D dle běžné aditivní šifry, která využívá posunu znaků ve znakové ASCII tabulce. a tento hlavolam vyřeší, tj. převede jej posloupností povolených tahů do tzv. základního postavení. 1.3 Celé zadání http://home.zcu.cz/ pkropik/zpe/semestralky_detaily/semestralni_prace_zpe_petr_kropik.pdf 3

2 Analýza úlohy 2.1 (De)Šifrování Samotný algoritmus S/D byl víceméně představen v zadání. Pro S/D je pravděpodobně nejvhodnější použít překlad jednotlivých znaků na jejich číselné ASCII hodnoty a ty potom při šifrování s ASCII hodnotou hesla sčítat, při dešifrování odčítat. Po provední potřebných početních operacích se musí číselná hodnota nacházet mezi hodnotou 32 a hodnotou 126 - tedy v intervalu tisknutelných znaků. Je tedy nutné implementovat funkce, které zajistí toto sčítání/odčítání hodnot. 2.2 Dekompozice programu 1. Vyhodnocování vstupu a) Zadání v parametru CLI i. Rozparsování vstupu b) Parametr CLI chybí c) Parametrů je moc 2. Výpis menu a) Rozvržení textu a formátování v menu b) Vyžádání vstupu od uživatele 3. Načítání vstupního řetězce ze souboru 4. Načítání vstupního řetězce ze stdin 5. Šifrování 6. Dešifrování 7. Výpis výstupu a) do souboru b) na stdout 4

2.3 Vyhodnocování vstupu Nejdříve by se mělo ověřit, jestli uživatel program spustil s perametrem, popřípadě jestli nezadal málo nebo moc parametrů (slov). V případě, že parametrů bude mnoho, program skončí s chybovým hlášením. Pokud bude znaků málo, vypíše menu a vyžádá si vstup. Program by mělo jít spustit přímo s parametry, které by obsahovaly vstup k (de)šifrování, heslo a požadovanou akci. Tím jsou zajištěny všechny důležité informace a může začít samotné (de)šifrování bez zbytečných otázek. 2.4 Načítání vstupního řetězce ze souboru K načítání ze souboru může dojít v případě, že parametrů na příkazové řádce bude málo (žádný.) Nyní je vhodné vypsat menu a uživateli dát na vybranou, zda chce řetězec načíst ze stdin nebo ze souboru. Poté bude uživatel pořádán o heslo a o akci - zda chce řetězec šifrovat nebo dešifrovat. Podle akce se zavolají příslušné funkce. 2.5 Šifrování Z důvodu rozdílné délky šifrovaného řetězce a hesla je nutné řetězec se vstupem a řetězec s heslem zpracovávat od začátku znak po znaku. Při načtění prvního znaku ze vstupu resp. z hesla se získá jejich číselná reprezentace v ASCII tabulce a hodnoty se sečtou. Protože ASCII tabulka obsahuje i netisknutelné znaky (na začátku i na konci), je nutné přičíst hodnotu 32 - protože 31 znaků od začátku je netisknutelná oblast. Když výsledná hodnota přesáhne rozsah tisknutelné oblasti, odečte se od ní 126 a znovu přičte 32 (aby byla výsledná hodnota tisknutelná). Potom se výsledné číslo přeloží na znak, uloží se do výstupního pole zašifrovaných znaků a pokračuje se šifrováním následujícího znaku ze vstupního řetězce. 2.6 Dešifrování Jedná se o jednoduchou inverzní operaci. Vstupní řetězce a heslo se načítají totožně. Místo sčítání jejich ASCII hodnoty se hodnota hesla odčítá od hodnoty dešifrovaného znaku. Potom se odečte 32 a pokud je výsledná hodnota menší než 32, tak se přičte 126 a odečte 32. Získané číslo se převede na znak a ten je tím dešifrován. 2.7 Výpis výstupu Získaný výstup se může vypsat na stdout nebo do souboru. Na stdout se text může vypsat automaticky a o možnost zápisu do souboru je vhodnější uživatele informovat a načíst jeho volbu. 5

3 Popis implementace 3.1 Přenositelnost Program byl vyvíjen pod operačním systémem GNU/Linux. Vzhledem k činnosti programu se pro portování na OS Windows nemusí provádět žádné změny ve zdrojovém kódu. Jediná odlišná věc může být soubor makefile - v případě, že používáte jiný kompilátor než GCC. 3.2 Datové struktury a správa paměti Jako hlavní datové struktury jsou zde dva vektory - Pro vstupní řetězec a pro heslo. Většina datových struktur je alokována staticky. Při vstupu ze souboru se "dynamicky"alokuje vektor pro uchovávání vstupního řetězce. Paměť pro tento řetězec se ovšem dealokuje až na konci programu, takže se dynamickou alokací příliš nezíská. Pro logické oprace a jiné rozhodovací procesy se využívají takové datové typy, aby svou kapacitou a možnostmi vyhovovaly situaci a zároveň, aby bylo zřejmé, že při správném běhu programu v dané proměnné nemůže být např. více, než dovoluje daný datový typ. V programu se používají převážně datové typy unsigned short. Tam, kde je zapotřebí znaménko, se používá short a int. Programátorem definované datové typy nejsou potřeba. 3.3 Popis algoritmů Výpis menu Menu je realizováno v souboru print_menu.c. Na řádku 31 se zkontroluje, zda je terminál dostatečně velký na vypsání menu. Když není, fce print_menu() vrátí 1 a program se ukončí. Od řádku 39 se deklarují proměnné, které mají v sobě uložen defaultní statický obsah menu. Od řádku 47 se vypočítává počet mezer, které se musí doplnit před řetězce, které se deklarovaly výše. Skládáním statických řetězců a mezer vznikne formátované menu. (ř. 59+). V jednoduchém menu je uživatel požádám o zadání jména souboru nebo stdin. Výsledek se uloží pomocí fce scanf() do prměnné zdroj_vstupu deklarované na řádku 106 v souboru vstup_ze_souboru.c. Proměnná je staticky alokovaná na počet znaků, které zbývají od promptu do konce řádku. Při načítání řetězce ze souboru je uživatel omezen na 9999999 znaků. 6

Vstup ze souboru V souboru vstup_ze_souboru.c na řádku 106 se vyhodnocuje, zda se vstupní řetězec bude načítat ze souboru ze souboru nebo ze stdin. Na řádku 134 a 213 jsou cykly, které uživatele nutí zadat S nebo D, aby se uvnitř těchto cyklů rozhodlo, zda se bude šifrovat nebo dešifrovat. Funkce pro S/D Pro zjednodušení programu zde existuje pouze jedna funkce pro šifrování a jedna pro dešifrování, ačkoliv je zde na výběr více možností (a formátů) vstupu. Jako parametr tyto funkce přebírají standardní řetězce typu char. Tzn. že se daný vstup musí nejdříve přesunout do polí, které se potom předají těmto funkcím. 7

4 Uživatelská příručka 4.1 Překlad zdrojových kódů Pro přeložení je nutné mít nainstalovaný kompilátor GNU GCC. Pokud používáte jiný, změňte proměnnou CC v souboru makefile (makefile.win ve windows). Program se překládá jak pod Windows tak pod GNU/Linux voláním příkazu make v adresáři se zdrojovými kódy. Např.: Stáhnu zdrojové kódy v archivu de_crypt.7z, archiv rozbalím do adresáře de_crypt. Otevřu si příkazovou řádku a příkazem cd <cesta_k_adresari_de_crypt> si změním pracovní adresář. Zadám příkaz make a v pracovním adresáři se vytvoří binární spustitelný soubor de_crypt (de_crypt.exe pod Windows) 4.2 Spuštění a obsluha Vstup z parametru Při volání programu se správným parametrem se ve funkci main zavolá fce vstup_z_parametru, která zajistí rozparsování parametru ze zadání do pole znaků pro vstupní řetězec a pro heslo. Jako poslední znak v parametru musí být akce. Příklad spouštění programu s parametrem: jashin@laptop ~/Dokumenty/Vyvoj/Rozpracovane/semestrálka $./de_crypt 1. Clanky zverejnene na techto strankach se casto tykaji jevu ci veci, heslo S Zadání: 1. Clanky zverejnene na techto strankach se casto tykaji jevu ci veci, Heslo: heslo Činnost: S Zašifrované znaky: [XJm8-:7EJFB1>16:1:1J:-J@1/4@;J?@>-:7-/4J?1J/-?@;J@E7-65J61BAJ/5JB1/5VJ Uložit do souboru? a/*: a Cesta k souboru (max 254 znaků): vystup jashin@laptop ~/Dokumenty/Vyvoj/Rozpracovane/semestrálka $ cat vystup [XJm8-:7EJFB1>16:1:1J:-J@1/4@;J?@>-:7-/4J?1J/-?@;J@E7-65J61BAJ/5JB1/5VJ Vstupní řetězec je vhodné uzavřít do apostrofů, aby shell nevyhodnocoval znaky uvnitř. 8

4.3 Ukázky běhu programu Činnost programu spuštěného se zadáním v parametru. V případě, že máte celý řetězec parametrů zadaný, stačí zmáčknout enter a program začne pracovat. 9

Toto je výstup programu po jeho volání bez parametrů. Více obrázů najdete v adresáři dokumentace/img/ V případě, že zavoláte program s více než čtyčmi parametry (nesymslné), tak program skončí takto: ERR#1: Příliš mnoho argumentů! Použití: de_crypt "<fráze>" "<heslo>" <S D> Když se stane, že ve vašem PC už nezbývá dostatek volné paměti (používáte příliš novou verzi Windows), vypíše se hláška: ERR#5: Out of memory! 10

5 Závěr 5.1 Výkonnost programu Při (de)šifrování delšího řetězce výkonost závisí především na funkcích pro (de)šifrování. Postupně jsem je zjednodušil asi o 80% řádek a myslím, že lépe už to nedokážu. Výkonnostní testy se neprováděly. 5.2 Kódování zdrojových souborů Všechny zdrojové kódy programu i dokumentace jsou uloženy v kódování UTF-8. 5.3 Důvod využívání menších datových typů Ačkoliv mi učitelé doporučují využívat int, pro přehlednost svý programů využívám takový datový typ, jaký přesně vyhovuje v dané situaci - aby bylo každému, kdo bude číst můj kód jasné, že v proměnné pro řízení na první pohled nekonečného cyklu nebude např. hodnota vyšší než 10. Někdo tvrdí, že využívání datových typů menších než int je pro úsporu paměti zbytečné. Již řadu let vlastním dnes už zastaralý PC IBM T43 a tam char zabírá 1 B v paměti, short 2 B a int 4 B - čili všechny menší datové typy na starších platformách nespotřebovávají velikost intu. A protože mám rád efektivitu, nebudu využívat int tam, kde není potřeba. 5.4 Vysvětlení nestandardních konstrukcí V programu jsem využil nekonečných cyklů. Nekonečné cykly jsou nekonečné proto, že si nemohu být jistý tím, kolikrát se uživatel splete a zadá špatné zadání. V kódu jsem příliš nepoužíval standardní ANSI-C komentáře - při vývoji jsem někdy zakomentovával velké kusy kódu a zakomentovaný komentář ( /* /*komentář */ */ ) se vyhodnotí jako chyba. Proto používám komentáře z C++. 11