Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Висновки. Для реалізації цього проекту було обрано мову програмування C++ із застосуванням

Читайте также:
  1. Висновки
  2. ВИСНОВКИ
  3. Висновки
  4. ВИСНОВКИ
  5. Висновки
  6. Висновки
  7. Висновки

Для реалізації цього проекту було обрано мову програмування C++ із застосуванням бібліотеки EasyBMP. В якості допоміжних засобів: текстовий редактор з підсвіткою синтаксису Notepad++ та компілятор g++ з пакету MinGW. Але для зручності було реалізовано 2 програми: одна для шифрування, друга – розшифрування.

ВИСНОВКИ

У роботі розглянуто питання шифрування зображення на основі їх власне графічної складової (тобто не як файлу на жорсткому диску, а як картинки на екрані комп’ютера) та ознайомлення з основними принципами та методами шифрування.

Основні результати, отримані при виконанні наукової роботи наступні:

­ розроблено 2 програми: перша – зашифровує файли, а друга – їх розшифровує;

­ для програм розроблено достатньо простий, але досить потужний алгоритм шифрування;

­ тестування програми показало, що шифрування і розшифрування 8-бітних зображень відбувається дещо повільніше, ніж ті ж дії над зображеннями з іншою кількістю кольорів. Виявилось, що це недолік бібліотеки EasyBMP, але автор бібліотеки пообіцяв виправити дану ситуацію.

 

 

СПИСОК ЛІТЕРАТУРИ

1. Керниган Б. У., Ритчи Д. М. «Язык программирования C»

2. Страуструп Б. «Язык программирования C++»

3. Шилдт Г. «C++ для начинающих: Шаг за шагом»

4. Шилдт Г. «Полный справочник по C++»

 

СПИСОК САЙТІВ

1. http://ru.wikipedia.org/wiki/Заглавная_страница

2. http://jenyay.net

 

 

ПЛАНИ ЩОДО МАЙБУТНЬОГО ПРОГРАМИ

У найближчому майбутньому планується зробити такий собі TODO-список, до якого будуть заноситись всі ідеї, які потім будуть сортуватись у порядку важливості.

Але і зараз вже є деякі ідеї:

· Реалізувати для обох програм єдиний графічний інтерфейс і єдиний виконавчий файл. Скоріше всього цей інтерфейс буде побудований на Qt – фреймворку, що зараз розвивається досить швидкими темпами, має гарну документацію та відкритий вихідний код. Можливо програма буде переписана на C# або Java, але це навряд чи.

· Зробити шифрування за паролем, який буде генеруватись на основі самого зображення та технології зчитування цього пароля з зашифрованого зображення для його розшифрування.

· Зробити шифрування за паролем, який введе користувач.

· Шифрування не тільки BMP-зображень шляхом впровадження іншої бібліотеки для роботи з зображеннями (наприклад, ImageMagick/GraphicsMagick) або створення своєї власної бібліотеки для роботи з зображеннями на основі інших бібліотек.

· Винесення коду, що відповідає за шифрування у окремі функції (зараз це не реалізовано через складнощі роботи з двомірними масивами) і винесення цих функцій у окрему бібліотеку.

Власне цей список буде доповнюватись, уточнюватись і розширятись.

 

 

ДОДАТОК А. ТЕКСТ ПРОГРАМИ

 

#include "EasyBMP.h"

#include <iostream>

#include <fstream>

#include <cstdio>

#define SQUARE_SIZE 10

 

using namespace std;

 

int main(int argc, char* argv[])

{

BMP Input, Output;

char input_path[80

output_path[80];

 

do {

if (argc!= 3) {

cout << "Put the name of the original file (for input):\n";

cin >> input_path;

}

else if (argc == 3) {

for (int i = 0; i < strlen(argv[1]); i++)

input_path[i] = argv[1][i];

input_path[strlen(argv[1])] = '\0';

}

}

 

while (Input.ReadFromFile(input_path)!= 1);

if (argc!= 3) {

cout << "Put the name of the encoded file (for output):\n";

cin >> output_path;

}

else if (argc == 3){

for (int i = 0; i < strlen(argv[2]); i++)

output_path[i] = argv[2][i];

output_path[strlen(argv[2])] = '\0';

}

 

register int Width = (int)Input.TellWidth(),

Height = (int)Input.TellHeight(),

BitDepth = (int)Input.TellBitDepth();

 

cout << "File info:" << endl;

cout << Width << " x " << Height

<< " at " << BitDepth << " bpp" << endl;

 

Output.SetBitDepth(BitDepth);

Output.SetSize(Width, Height);

 

 

RGBApixel Temp;

for (int h = 0; h < Height; h++)

for (int w = 0; w < Width; w++) {

Temp = Input.GetPixel(w, h);

Output.SetPixel(w, h, Temp);

}

 

RGBApixel pixels[Height][Width];

 

for (int h = 0; h < Height; h++)

for (int w = 0; w < Width; w++)

pixels[h][w] = Input.GetPixel(w, h);

 

const int h_const = (Height - Height % SQUARE_SIZE) / 2 - ((Height - Height % SQUARE_SIZE) / 2) % SQUARE_SIZE;

const int w_const = (Width - Width % SQUARE_SIZE) / 2 - ((Width - Width % SQUARE_SIZE) / 2) % SQUARE_SIZE;

for (int h = 0; h < h_const; h += SQUARE_SIZE)

for (int w = 0; w < Width - Width % SQUARE_SIZE - SQUARE_SIZE; w += SQUARE_SIZE * 2)

for (int p_h = 0; p_h < SQUARE_SIZE; p_h++)

for (int p_w = 0; p_w < SQUARE_SIZE; p_w++)

{

Temp = pixels[h + p_h][w + p_w];

pixels[h + p_h][w + p_w] = pixels[Height - Height % SQUARE_SIZE - SQUARE_SIZE - h + p_h][w + p_w];

pixels[Height - Height % SQUARE_SIZE - SQUARE_SIZE - h + p_h][w + p_w] = Temp;

}

 

for (int h = 0; h < Height - Height % SQUARE_SIZE - SQUARE_SIZE; h += SQUARE_SIZE * 2)

for (int w = 0; w < w_const; w += SQUARE_SIZE)

for (int p_h = 0; p_h < SQUARE_SIZE; p_h++)

for (int p_w = 0; p_w < SQUARE_SIZE; p_w++) {

Temp = pixels[h + p_h][w + p_w];

pixels[h + p_h][w + p_w] = pixels[h + p_h][Width - Width % SQUARE_SIZE - SQUARE_SIZE - w + p_w];

pixels[h + p_h][Width - Width % SQUARE_SIZE - SQUARE_SIZE - w + p_w] = Temp;

}

 

for (int h = 0; h < Height; h++)

for (int w = 0; w < Width; w++)

Output.SetPixel(w, h, pixels[h][w]);

 

fstream out(output_path);

out.close();

 

Output.WriteToFile(output_path);

cout << "If you haven't seen the error messsage then file (" << input_path << ") was succesfully encoded to another file (" << output_path << ")!:)" << endl;

 

getchar();

return 0;

}

bmp_encode.cpp (програма для шифровування):

#include "EasyBMP.h"

#include <iostream>

#include <fstream>

#include <cstdio>

#define SQUARE_SIZE 10

 

using namespace std;

 

int main(int argc, char* argv[])

{

BMP Input, Output;

char input_path[80

output_path[80];

 

do {

if (argc!= 3) {

cout << "Put the name of the encoded file (for input):\n";

cin >> input_path;

}

else if (argc == 3) {

for (int i = 0; i < strlen(argv[1]); i++)

input_path[i] = argv[1][i];

input_path[strlen(argv[1])] = '\0';

}

}

 

while (Input.ReadFromFile(input_path)!= 1);

if (argc!= 3) {

cout << "Put the name of the decoded file (for output):\n";

cin >> output_path;

}

else if (argc == 3){

for (int i = 0; i < strlen(argv[2]); i++)

output_path[i] = argv[2][i];

output_path[strlen(argv[2])] = '\0';

}

 

register int Width = (int)Input.TellWidth(),

Height = (int)Input.TellHeight(),

BitDepth = (int)Input.TellBitDepth();

 

cout << "File info:" << endl;

cout << Width << " x " << Height

<< " at " << BitDepth << " bpp" << endl;

 

Output.SetBitDepth(BitDepth);

Output.SetSize(Width, Height);

 

 

RGBApixel Temp;

for (int h = 0; h < Height; h++)

for (int w = 0; w < Width; w++) {

Temp = Input.GetPixel(w, h);

Output.SetPixel(w, h, Temp);

}

 

RGBApixel pixels[Height][Width];

 

for (int h = 0; h < Height; h++)

for (int w = 0; w < Width; w++)

pixels[h][w] = Input.GetPixel(w, h);

 

const int h_const = (Height - Height % SQUARE_SIZE) / 2 - ((Height - Height % SQUARE_SIZE) / 2) % SQUARE_SIZE;

const int w_const = (Width - Width % SQUARE_SIZE) / 2 - ((Width - Width % SQUARE_SIZE) / 2) % SQUARE_SIZE;

 

for (int h = 0; h < Height - Height % SQUARE_SIZE - SQUARE_SIZE; h += SQUARE_SIZE * 2)

for (int w = 0; w < w_const; w += SQUARE_SIZE)

for (int p_h = 0; p_h < SQUARE_SIZE; p_h++)

for (int p_w = 0; p_w < SQUARE_SIZE; p_w++) {

Temp = pixels[h + p_h][w + p_w];

pixels[h + p_h][w + p_w] = pixels[h + p_h][Width - Width % SQUARE_SIZE - SQUARE_SIZE - w + p_w];

pixels[h + p_h][Width - Width % SQUARE_SIZE - SQUARE_SIZE - w + p_w] = Temp;

}

for (int h = 0; h < h_const; h += SQUARE_SIZE)

for (int w = 0; w < Width - Width % SQUARE_SIZE - SQUARE_SIZE; w += SQUARE_SIZE * 2)

for (int p_h = 0; p_h < SQUARE_SIZE; p_h++)

for (int p_w = 0; p_w < SQUARE_SIZE; p_w++)

{

Temp = pixels[h + p_h][w + p_w];

pixels[h + p_h][w + p_w] = pixels[Height - Height % SQUARE_SIZE - SQUARE_SIZE - h + p_h][w + p_w];

pixels[Height - Height % SQUARE_SIZE - SQUARE_SIZE - h + p_h][w + p_w] = Temp;

}

 

for (int h = 0; h < Height; h++)

for (int w = 0; w < Width; w++)

Output.SetPixel(w, h, pixels[h][w]);

 

fstream out(output_path);

out.close();

 

Output.WriteToFile(output_path);

cout << "If you haven't seen the error messsage then file (" << input_path << ") was succesfully decoded to another file (" << output_path << ")!:)" << endl;

 

getchar();

return 0;

}

 

Весь вихідний код програми матеріал для програми знаходиться на диску у директорії Program\Sources, тут приведений лише код власне програми без коду бібліотек.

 

ДОДАТОК Б. ОПИС БІБЛІОТЕКИ EASYBMP

На диску у папці EasyBMP Manual міститься файл EasyBMP_UserManual.pdf – це документація до бібліотеки EasyBMP (на англійській мові). В майбутньому автор збирається перекласти документацію на українську та російську мови.

 

 

ДОДАТОК В. ЗАСТОСУВАННЯ ПРОГРАМИ НА ПРАКТИЦІ

Щоб використати програми у системі сімейства Windows потрібно:

1. Запустити інтерфейс командного рядка (Win+R – cmd).

2. Ввести назву програми, назву вхідного та вихідного файлів:

3. Або запустити програму через Провідник та ввести назви файлів:

Про те, якими командами зкомпілювати програми вказано в файлі Program\Sources\How to compile.txt на диску.


[1] справа у тому, що у наступному розділі буде іти мова про історію криптографії, але про питання автентичності мова там йти не буде, бо на це існує 2 причини: це те, що питання автентичності не входить у тему моєї проектної роботи і те, майже до середини XX ст. криптографія і шифрування були поняттями майже (якщо і не цілком) однаковими.

[2] Криптоанализ — наука, що вивчає математичні методи порушення конфіденціальності і цілісності інформації.

[3] Алгоритм було розроблено Брюсом Шнайєром в 1993 році. Являє собою мережу Фейстеля. Виконано на простих і швидких операціях: XOR, підстановка, складання. Є незапатентованим і вільно поширюваним.

[4] - компактна (часто неформальна) мова опису алгоритмів, що використовує ключові слова імперативних мов програмування, але опускає несуттєві подробиці і специфічний синтаксис.

[5] [номер_стрічки][номер_стовбчика], зараз при нумеруванні пікселів я використовую початок нумерації як 1, на відмінну від C/C++, де початок нумерації – 0.

[6] mod – остача від ділення націло (у C/C++ - %).

[7] Тут і далі: нумерація стобчиків і рядків зображення буде вестися як і у C/C++ - від 0 до Висота – 1 або Ширина – 1.

[8] Тут і далі при описуванні структур не буде йти мова про аргументи, значення яких можуть набувати елементи цих структур.

[9] Порядок від молодшого до старшого або (англ. little-endian, дослівно: «гострокінцевий»), запис починається з молодшого байта і закінчується старшим. Тобто .

[10] На мою думку ну не може мова (Delphi), яка унаслідувала свій синтаксис від мови програмування, що була створена для навчання (Pascal), і «прикрутила ООП», бути успішною та зручною.

[11] Фреймворк або каркас (англ. Framework) — основна концептуальна система або структура для вирішення комплексних задач. Програмний фреймворком (англ. software framework) є готовим до використання комплекс програмних рішень, включаючи, дизайн, логіку та базову функціональність системи або підсистеми. Відповідно програмний фреймворк може містити в собі також допоміжні програми, якісь бібліотеки коду, скрипти та загалом все, що полегшує створення та поєднання різних компонентів великого програмного забезпечення чи швидке створення готового і не обов'язково великого програмного продукту. Побудова кінцевого продукту відбувається зазвичай на базі єдиного API.

[12] Цитата з книги Брайана Кернігана та Денніса Рітчі «Мова програмування C». (Керниган Б. У., Ритчи Д. М. Язык программирования C = C programming language — 2-е изд. — М.: «Вильямс», 2007. — С. 304. — ISBN 0-13-110362-8.)

[13] Інтегроване Середовище Розробки (ІСР) — (від Integrated Development Environment (також можливі інтерпретації Integrated Design Environment — інтегроване середовище проектування; чи Integrated Debugging Environment — інтегроване середовище відлагодження) це комп’ютерна програма, що допомагає програмістові розробляти нове програмне забезпечення чи модифікувати (удосконалювати) вже існуюче.


Дата добавления: 2015-07-20; просмотров: 75 | Нарушение авторских прав


Читайте в этой же книге: Етапи шифрування | Види шифрування | Суть роботи алгоритму | Висновки | Структура файлу |
<== предыдущая страница | следующая страница ==>
Обрання мови програмування| Пример создания собственной таблицы

mybiblioteka.su - 2015-2024 год. (0.022 сек.)