Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ІКІТ_2015_805010102_Юрчик_С.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
6.69 Mб
Скачать
    1. Формування корпоративної мережі для начального закладу

Заміна старого обладнання на нове підвищить роботу мережі, інтернету і швидкості роботи комп’ютерів в мережі. Налаштування нових маршрутизаторів на ретрансляторів і один на точку доступу ми будемо мати одну мережу (з однією назвою) і можемо підключити максимальну кількість комп’ютерів. Сервер використовувати середньої потужності (такий як: процесор: Intel Xeon Quad-Core E3-1220 v3 (3.1 Ггц), 8 гб оперативної пам’яті і 2 жорстких диски по 1 тб), якого буде достатньо для відмінної роботи кожної навчальної будівлі ). В кожному корпусі буде розміщено сервер на яких буде зберігатись вся необхідна інформація для навчання. Окремо буде встановлено додатково жорсткий диск на якому буде записана електронна бібліотека до якої зможуть підключитись всі студенти і викладачі. Але повного доступу студенти не матимуть.

Загальна схема розміщення мережевого обладнання і взаємодії між начальними корпусами представлена на (рис.3.20). Кожна будівля позначення цифрою (1,2….9 і тд). Принцип розставлення мережевого обладнання на поверхах однаковий в залежності від кількості поверхів. Чим більше поверхів в будівлі тим більше потрібно розміщувати маршрутизаторів.

Рис. 3.20. Загальна схема підключення обладнання

Всі навчальні будівлі синхронізовані між собою і мають зв’язок. Тому обмінюватись інформацією дуже легко і просто тому що є загальна папка. Створення загальної мережевої папки є одним з важливих елементів настройки мережі на Windows 7, при цьому, процес це досить простий і займає всього кілька хвилин. Всі комп’ютери викладачів мають групу в мережі (закриту групу) і можуть в цій групі обмінюватись потрібною інформацією. Для нормальної роботи, потрібно перевірити комп’ютери щоб вони були в одній групі. Для цього необхідно упевнитися в цьому перейшовши Пуск> контекстне меню Комп'ютер -> Властивості -> Змінити параметри -> Редагувати. Для прикладу обрана група "WORKGROUP" (рис. 3.10.). Для мережі між двома комп'ютерами (і більше) ім'я комп'ютера можна залишити і з кириличними буквами, але при виникненні будь-яких проблем ім'я потрібно буде поміняти на латиницю.

    1. Шифрування даних

Один із способів шифрування - шифрування з використанням операції «виключне АБО» або шифр Вернама. У криптографії шифр Вернама відомий також як «схема од-норазових блокнотів». Рішення є системою симетричного шифрування, яка була винайдена в 1917 році співробітниками AT & T Мейджором Джозефом Моборн і Гильбертом Вернама.

У 1949 роках була опублікована робота Клода Шеннона, де Шеннон довів абсолют-ву стійкість шифру Вернама. У цій роботі Шеннон показав, що не існує інших шифрів з подібними властивостями і його висновком стало наступне твердження: шифр Вернама - найбезпечніша криптосистема з усіх наявних. Однак, слід зауважити, що для того, щоб шифр дійсно був стійким, необхідно виконання наступних трьох правил:

1)ключ для шифрування вибирається випадковим чином.

2)довжина ключа повинна бути дорівнює довжині відкритого тексту.

3)ключ повинен використовуватися “ТІЛЬКИ” один раз.

Так як цей шифр був придуманий для комп'ютерних систем, то слід зауважити, що базується він на двійковій арифметиці. Основним об'єктом розгляду в даному методі шифрування є логічна операція XOR (взаємовиключне АБО). Таким чином, так як у нас двійкова арифметика, то всі операції будуть здійснюється над нулем (0) і одиницею (1). Логічна операція XOR, на відміну від операції OR, при логічному порівнянні 0 і 1 дає 1, при порівнянні 1 з 1 дає 0, а при 0 з 0 дає 0. Отже, якщо ми виконаємо операцію XOR над числами 10110 і 11010, то отримаємо: 10110 xor 11010 = 01100.

Далі, так як шифр працює з двійковою системою числення, необхідно розуміти, що букви - це всього лише деяка інтерпретація числа, тобто число є кодом сім-вола деякої таблиці кодувань. Наприклад, найбільш популярні таблиці кодувань це: ANSI, ASCII і UTF (unicode). Природньо, що в кожній таблиці один і той же символ може мати різний код, тому, у уникнення плутанини, необхідно використовувати одну й ту ж кодування при шифрування і дешифрування. Тобто процес шифрування і дешифрування даним методом буде твором операції XOR посимвольно рядки з повідомленням і рядки містить ключ. При цьому стає зрозумілим, що ключ і повідомлення повинні мати однакову довжину рядка. У разі ж коли вони не будуть рівнятися, то будуть виникати помилки в кодуванні та дешифрування, якщо тільки програмно й обмежити процес шифрування (тобто якщо не передбачити можливість шифрування тільки частини повідомлення).

Нашим завданням буде створити програмну реалізацію даного методу і забезпечити можливість мережевого функціонування нашого програмного продукту. Зашифрування даних - процес перетворення відкритих даних в зашифровані за допомогою шифру. Шифрування - процес шифрування і розшифрування даних. Дешифрування - процес перетворення закритих даних у відкриті.

Алгоритм шифрування (виробляється на сервері і на клієнті перед відправкою повідомлення):

1. читаємо рядок який необхідно зашифрувати в масив, довжиною рівній довжині рядка.

2. вводимо ключ по довжині дорівнює довжині рядка, який необхідно зашифрувати.

3. читаємо ключ в масив, довжиною рівній довжині ключа (і при цьому дорівнює довжині повідомлення).

4. виконуємо операцію XOR по-елементно між кожним з елементів матриці в яку міститься повідомлення, і матриці в якій міститься ключ.

5. переписуємо підсумкову матрицю в рядок.

Алгоритм дешифрування (виробляється на стороні клієнта і сервера):

1. заповнюємо матрицю отриманим шифротекстом.

2. вводимо ключ яким шифрували повідомлення.

3. читаємо ключ в масив, довжиною рівній довжині ключа.

4. виконуємо операцію XOR поелементно між кожним з елементів матриці в яку міститься зашифроване повідомлення, і матриці в якій міститься ключ.

5. записуємо повідомлення, читаючи вміст матриці в рядок.

    1. Проектування та розробка програмними засобами мови C++ для захисту локальних мереж

Borland C ++ Builder - випущене компанією Borland засіб швидкої розробки додатків, що дозволяє створювати додатки на мові C ++, використовуючи при цьому середовище розробки і бібліотеку компонентів Delphi. C ++ Builder являє собою SDI-додаток, головне вікно якого містить інструментальну панель і палітру компонентів. Крім цього, за замовчуванням при запуску C ++ Builder з'являються вікно об'єктів і форма нового додатка. Під вікном форми програми знаходиться вікно редактора коду (рис 3.21.).

Рис 3.21. Середовище розробки C++ Builder

Спроектовано і розроблено програмними засобами на мові С++ два програмних додатка (дві програми спільні рис 3.22).

Рис 3.22. Інтерфейс програми-сервер і клієнт

Як видно з (рис 3.22), інтерфейс програми-сервера і клієнта складається з таких компонентів:

• текстове поле для введення ключа;

• кнопка «Завантажити текст» для завантаження тексту повідомлення або матриці з заздалегідь заготовленого файлу;

• кнопка «Зашифрувати рядка файлу» для шифрування введеного повідомлення і відправки його (зашифрованого повідомлення) по мережі;

• кнопка «Знайти мінімальні елементи на діагоналях квадратної матриці» для пошуку мінімальних елементів на діагоналях і їх шифрування і відправлення його (зашифрованого повідомлення) по мережі;

• текстове поля для відображення мінімальних елементів на діагоналях;

• текстове поле для введення повідомлень;

• текстове поле для відображення прийнятого зашифрованого повідомлення;

• текстове поле для відображення розшифрованого повідомлення;

• текстове поля для ключа розшифровки;

• кнопка «Розшифрувати дані» для розшифровки повідомлень.

Перейдемо до тестування програми: на всіх подавалось повідомлення “ дуже секретне повідомлення”. Далі вказаний файл ми завантажували в додаток-сервер і даємо процедурі шифрування з введенням ключем по довжині дорівнює довжині повідомлення з додаванням символів переведення на новий рядок.

На стороні клієнта вказували IP-адресу сервера (в ході тестування робота здійснювалась на одній машині, тому як видно на рисунку 4.5 в полі «Адреса сервера» ми указували localhost). Після підключення клієнта до сервера передані повідомлення сервером будуть відображатися у відповідному полі клієнтського додатку (рис.3.23).

Рис 3.23. Вікно програми-клієнта під час тестування (приймання зашифрованого повідомлення від сервера)

Потім відправляємо зашифроване повідомлення, отримане від сервера дешифруванню і отримуємо результат (Рис 3.24). Як бачимо, отримане в результаті дешифрування повідомлення ідентично тому, що подавалося на вхід додатком-серверу.

Рис 3.24. Результат програми

Код програми:

Код сервера програми:

#include <vcl.h>

#include<iostream.h>

#include<fstream.h>

#pragma hdrstop

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

String Msg,FilePath, Block , KeyText,MsgToClient="", UnCodeMsg;

String Alfavit ="абвгдежзийклмнопрстуфхцчшщъыьэюя., |";

int COUNT_BLOCK_LENGTH = 8; // довжина блоку шифровання

int KeyCode = 0; // числовое представление нашего ключа то бишь сумма! значений символов ключа

int RememberKeyCode = 0;

int Sdvig = 0; // смещение символа ( шифрование)

int NewPosition = 0; // позиция символа в алфавите которым будем шифровать

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

// то есть при инициализации приложение , состояние сокета выставляется в

// ACTIV так надо ;)

Form1->ServerSocket1->Active=true;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,

TCustomWinSocket *Socket)

{

Msg=Socket->ReceiveText();

// если данные есть, то запишем их в поле, точнее покажем пользователю

// имеется ввиду зашифрованные данные полученные от сервера

if (Msg!="")

{

// собственно записываем в поле шифрованное сообщение

mCodeText->Text = Msg;

// делаем кнопку расшифровать доступной для пользователя

bUncodeText->Enabled = true;

}

// отправили данные клиенту, по запросу

// если данных нет, точнее они ещё не сформированы

// ничего не отправиться ,т.к. MsgToClient = "";

// Socket->SendText(MsgToClient);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::bLoadTextClick(TObject *Sender)

{

// открываем окно для выбора файла

OpenPathToFile->Execute();

// записали путь к текстовому файлу

FilePath = OpenPathToFile->FileName;

// считываем файл в поле редактирования серверного приложения

char* filepath = FilePath.c_str();

// это сразу загрузка из файла целиком в поле редактирования

mTextFromFile->Lines->LoadFromFile(filepath);

// приведение всех символов в нижний регистр

// чтобы не было большой мороки

mTextFromFile->Text = mTextFromFile->Text.LowerCase();

}

Код клієнта програми:

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

String Msg,FilePath, Block , KeyText, UnCodeMsg, MsgToClient;

String Alfavit ="абвгдежзийклмнопрстуфхцчшщъыьэюя., |";

int COUNT_BLOCK_LENGTH = 8; // длина блока шифрования

int KeyCode = 0; // числовое представление нашего ключа то бишь сумма! значений символов ключа

int RememberKeyCode = 0;

int Sdvig = 0; // смещение символа ( шифрование)

int NewPosition = 0; // позиция символа в алфавите которым будем шифровать

int i;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

//Form1->ClientSocket1->Active=true;

}

//---------------------------------------------------------------------------

void __fastcall TForm1::bUncodeTextClick(TObject *Sender)

{

// очищаем поле где расшифрованы данные

mUncodeText->Lines->Clear();

// очищаем строку в которой будет хранится расшифрованный текст

UnCodeMsg = "";

Msg = mCodeText->Text;

// проверяем введён ли ключ

int len=Msg.Length();

KeyText = key->Text;

int keylen = KeyText.Length();

if (keylen!=len )

{

ShowMessage("Ключ должен быть " + (AnsiString)Msg.Length() + " значным (с учетем знаков переноса)");

return;

}

len=Msg.Length();

KeyText = key->Text;

keylen = KeyText.Length();

char *oStr = new char[len]; //объявляем динамический массив указанной длины для открытого текста

char *okey = new char[len]; //точно такой же массив объявляем для ключа

char *shStr = new char[len]; //массив-приемник для зашифрованного текста

oStr=Msg.c_str();

int nbukva;

for (int i =0;i<len; i++){

nbukva=Alfavit.Pos(KeyText.operator [](i+1));

okey[i]=char(nbukva);

}

for(int i = 0; i<len; i++){

shStr[i]=oStr[i]^okey[i];

}

for(int i = 0; i<len; i++){

UnCodeMsg += shStr[i];

}

mUncodeText->Text=UnCodeMsg;

// записываем в удобоваримом виде в текстовое поле, чтобы была наглядность

// пишем построчно

}

void __fastcall TForm1::ClientSocket1Connect(TObject *Sender,

TCustomWinSocket *Socket)

{

// проверка связи , просто покажен на сервере что клиент подключен

// Socket->SendText("?");

lStatusClient->Caption = "Статус Сервера: Подключен!";

// просто обновление метки, а то иначе билдер тупит

lStatusClient->Refresh();}

//---------------------------------------------------------------------------

void __fastcall TForm1::ClientSocket1Read(TObject *Sender,

TCustomWinSocket *Socket)

{

Msg=Socket->ReceiveText();

// если данные есть, то запишем их в поле, точнее покажем пользователю

// имеется ввиду зашифрованные данные полученные от сервера

if (Msg!="")

{

// собственно записываем в поле шифрованное сообщение

mCodeText->Text = Msg;

// делаем кнопку расшифровать доступной для пользователя

bUncodeText->Enabled = true;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::bSetAddrClick(TObject *Sender)

{

// если в поле вводе не введен адрес, то такое сообщение

if (eSocketAddr->Text=="")

{

ShowMessage("Отсутствует адрес хоста");

return;

}

// привязываем в сокету адрес с которым надо коннектиться

ClientSocket1->Address = eSocketAddr->Text;

// очищаем поле для показа шифрованнного текста, на всякий случай

// mCodeText->Lines->Clear();

ВИСНОВОКИ

Дипломна робота присвячена розробці проектування сучасної локальної мережі для навчального закладу. Для реалізації даного завдання було потрібно спроектувати локальну мережу університету, зокрема п’ятого корпусу, для порівняння було взято мережу Білоруського економічного університету і мережу.

Проведений аналіз показав, що при однаковій швидкості інтернету внутрішня мережа (локальна) працює по різному, а саме швидкість передачі пакету різна, вартість, безпека і використання енергоресурсів. Для покращення якості було встановлено новітнє обладнання, розбиття мережі, створення програми для захисту і спроектовано мережу.

Представлений графік порівняння мереж зображує, що використовуючи дану технології можна покращити мережу кожного вузу.

Проведений опис налаштування комп’ютерів і обладнання, яке необхідне для підключення мережі, а також налаштування і розбиття ip-адресів.

Розроблена локальна мережа на 150 робочих станцій для навчального корпусу, що використовує технологію передачі даних Gigabit Ethernet і надає можливість обміну даними по бездротовій технології Wi-Fi. Для забезпечення функціонування мережі запропоновано використовувати активне мережеве обладнання від фірми D-Link, а також структуровану кабельну систему.

Також було визначено програмне забезпечення для роботи локальної мережі.

У ході виконання роботи було спроектовано і розроблено клієнт-серверний додаток, що реалізує алгоритм шифрування методом підсумовування за модулем 2 (операція XOR). Додаток реалізовано за клієнт-серверній архітектурі і може функціонувати по мережі.

Результати виконаної роботи повністю задовольняють завданням і даний дипломну роботу можна вважати вдало завершеною.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]