Дослідження та порівняльний аналіз алгоритмів кодування даних

  • Вид работы:
    Дипломная (ВКР)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Украинский
    ,
    Формат файла:
    MS Word
    1,07 Мб
  • Опубликовано:
    2012-09-07
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Дослідження та порівняльний аналіз алгоритмів кодування даних

Міністерство освіти і науки України

Криворізький інститут

Кременчуцького університету економіки, інформаційних технологій і управління

Кафедра технічної кібернетики





ДИПЛОМНА РОБОТА

зі спеціальності

.091402 “Гнучкі комп’ютеризовані системи та робототехніка“

ПОЯСНЮВАЛЬНА ЗАПИСКА

«Дослідження та порівняльний аналіз алгоритмів кодування даних»

Студентки групи ГКС-05-д Лешакової Ірини Володимирівни

Керівник роботи ст. викл. Батареєв Віктор Володимирович

Консультанти:

зі спеціальної частини доц., к.т.н. Лукашенко Й.М.

з програмної частини доц., к.т.н. Вдовиченко І.Н.

з економічної частини доц., к.е.н. Тимко Є.В.

з охорони праці доц., к.т.н. Климович Г.Б.

нормоконтроль ст. викл. Захарова Г.Б.

Завідувач кафедри ТК доц., к.т.н. Старіков О.М.

Кривий Ріг

Міністерство освіти і науки України

Криворізький інститут

Кременчуцького університету економіки, інформаційних технологій і управління

Кафедра технічної кібернетики

Спеціальність 7.091402 “Гнучкі комп’ютеризовані системи та робототехніка“

ЗАТВЕРДЖУЮ

Зав. кафедрою доц., к.т.н. Старіков О.М.

_______________________

" 1 " листопада 2009 р.

ЗАВДАННЯ

на дипломну роботу студента

Лешакової Ірини Володимирівни

(прізвище, ім'я, по-батькові)

. Тема роботи: Дослідження та порівняльний аналіз алгоритмів кодування даних______________

затверджена наказом по інституту від " 29 " жовтня 2009 р. № 73С-01_____

. Термін здачі студентом закінченої роботи 25.05.10. _

. Вхідні дані до роботи: Вимоги до кінцевого програмного продукту, матеріали наукових досліджень, опис алгоритмів кодування даних.

. Зміст розрахунково-пояснювальної записки (перелік питань, що підлягають розробці): Постановка завдання; Дослідження мови програмування С#; Дослідження алгоритмів кодування; Опис функціональних можливостей та програмної реалізації проектованої системи; Економічне обґрунтування доцільності розробки програмного продукту; Охорона праці.

. Перелік графічного матеріалу (з точними вказівками обов'язкових креслень)

1. Генеалогічне древо С#

. Схема алгоритму 3DES

. Схема шифрування алгоритму DES

. Процедура SubBytes

. Логіко-функціональна схема роботи системи

. Загальний вид головної форми системи на етапі проектування

7. Головне вікно системи в одному з робочих режимів____________________________________

6. Консультанти з роботи, з вказівками розділів роботи, що належать до них

Розділ

Консультант

Підпис, дата



Завдання видав

Завдання прийняв

Спеціальна частина

Лукашенко Й.М.



Програмна частина

Вдовиченко І.Н.



Економічна частина

Тимко Є.В.



Охорона праці

Климович Г.Б.




. Дата видачі завдання 01.11.09 р.

Керівник                                          ____________________

Завдання прийняв до виконання             ____________________

КАЛЕНДАРНИЙ ПЛАН

№ п/п

Найменування етапів дипломної роботи

Термін виконання етапів роботи

Примітки

1.

Отримання завдання на дипломну роботу

01.11.09


2.

Огляд існуючих рішень

20.02.10


3.

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

13.03.10


4.

Програмна частина (постановка задачі, створення програмного забезпечення, опис алгоритму рішення задачі, проектування та опис інтерфейсу користувача, опис програми)

28.04.10


5.

Оформлення пояснювальної записки

6.05.10


6.

Оформлення графічної документації

14.05.10


7.

Оформлення електронних додатків до диплому

20.05.10


8.

Представлення дипломної роботи до захисту

25.05.10



Студент-дипломник     _________________

Керівник роботи          _________________

Анотація

Метою дипломної роботи є дослідити та зробити порівняльний аналіз алгоритмів кодування даних. В ході досліджень була створена система яка проводить кодування даних різними алгоритмами кодування і виводить результати аналізу.

Розроблена система реалізована в середовищі Visual Studio 2008 Express.

Розділів 6, схем та рисунків 28, таблиць 20, бібліографічних посилань 30, загальний обсяг - 103.

Аннотация

Целью дипломной работы является исследовать и провести сравнительный анализ алгоритмов кодирования данных. В ходе исследований была создана система которая проводит кодирования данных разными алгоритмами кодирования и выводит результат анализа

Разработанная система реализована в среде Visual Studio 2008 Express.

Разделов 6, схем и рисунков 28, таблиц 20, библиографических ссылок 30, общий объем - 103.

The summary

purpose of the diploma work is to investigate and conduct a comparative analysis of algorithms for data encryption. The studies established system ma which holds data encoding different encryption algorithm and displays the result of analysis

The developed system is implemented in Visual Studio 2008 Express

Sections 6, circuits and figures 28, tables 20, bibliographic references 30, total amount - 103.

ЗМІСТ

ВСТУП

. ПОСТАНОВКА ЗАВДАННЯ

.1 Найменування та галузь використання

.2 Підстава для створення

.3 Характеристика розробленого програмного забезпечення

.4 Мета й призначення

.5 Загальні вимоги до розробки

.6 Джерела розробки

. Дослідження мови програмування С#

.1 Історія створення мови С#

.2 Зв'язок С# з .NET Framework

.3 Об'єктивно-орієнтоване програмування

.4 Два керуючих оператора

. ДОСЛІДЖЕННЯ АЛГОРИТМІВ КОДУВАННЯ

.1 Алгоритм Triple DES

.1.1 Історія створення алгоритму Triple DES

.1.2 Алгоритм

.1.2 Криптостійкість

.2 Алгоритм DES

.2.1 Історія створення алгоритму DES

.2.2 Блочний шифр

.2.3 Перетворення Мережею Фейстеля

.2.4 Схема шифрування алгоритму DES

.2.5 Цикли шифрування

.2.6 Генерування ключів ki

.2.7 Кінцева перестановка

.2.8 Схема розшифрування.

.2.9 Режими використання DES

.2.10 Криптостійкість алгоритму DES

.2.11 Застосування

.3 Дослідження алгоритму RC2

.3.1 Алгоритм RC2

.4 Дослідження алгоритму AES

.4.1 Опис AES

.4.2 Шифрування

.5 Дослідження алгоритму RIPEMD-160

.5.1 Реалізація RIPEMD-160

.5.2 RIPEMD-160 на псевдокоді

.5.3 Приклади хешів RIPEMD-160

.5.4 Продуктивність

.6. Дослідження алгоритму SHA-2

.6.1 Історія SHA-2

.6.2 Алгоритм SHA-2

.6.3 Приклади SHA-2.

.6.4 Криптоаналіз SHA-2

.6.5 Застосування та сертифікація

. ОПИС ФУНКЦІОНАЛЬНИХ МОЖЛИВОСТЕЙ ТА ПРОГРАМНОЇ РЕАЛІЗАЦІЇ ПРОЕКТОВАНОЇ СИСТЕМИ

.1 Функціональне призначення та технологічні особливості розробки

.2 Логіко-функціональна схема роботи системи

.3 Програмна реалізація основних процедур системи

.4 Опис інтерфейсу користувача

. ЕКОНОМІЧНЕ ОБҐРУНТУВАННЯ ДОЦІЛЬНОСТІ РОЗРОБКИ ПРОГРАМНОГО ПРОДУКТУ

.1 Організаційно-економічна частина

.2 Розрахунок економічного ефекту по впровадженню програмного продукту.

. ОХОРОНА ПРАЦІ

.1 Аналіз небезпечних і шкідливих факторів в обчислювальному центрі

.2 Заходи щодо нормалізації шкідливих і небезпечних факторів

.3 Пожежна безпека

ВИСНОВКИ

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

ДОДАТОК А - код програми

ВСТУП


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

Алгоритми кодування даних розрізняються за типом: асиметричні та симетричні.

Метою дипломної роботи є дослідження та проведення порівняльного аналізу алгоритмів кодування даних. Для реалізації цих вимог зручніше всього було створити незалежну програму у вигляді exe-файлу, що працює з-під Windows, з інтерфейсом максимально пристосованого для зручної роботи, що не потребує ніяких додаткових знань.

Реалізація даної задачі проводиться у системі програмування Visual Studio 2008 Express, яка володіє великими можливостями по створенню програм, необхідним набором драйверів для доступу до самих відомих форматів баз даних, зручними і розвиненими засобами для доступу до інформації, що розташована як на локальному диску, так і на віддаленому сервері, а також великою колекцією візуальних компонентів для побудування вікон, які відображаються на екрані. Visual Studio 2008 Express має багато бібліотек для спрощення програмування, на відміну від Delphi.

Система візуального програмування Visual Studio 2008 Express користується великою популярністю серед широкого круга користувачів: від програмістів, що починають, до досвідчених розробників складних додатків, що займаються створенням великих інформаційних систем. Visual Studio 2008 Express дозволяє швидко і ефективно розробляти найрізноманітніші програми. Вона має розвинені можливості по створенню призначеного для користувача інтерфейсу, широкий набір функцій, методів і властивостей для вирішення прикладних розрахунково-обчислювальних завдань.Studio 2008 Express використовується перш за все для створення і підтримки систем, призначених як для окремих персональних комп'ютерів, так і для серверів. Visual Studio 2008 Express, як і розроблені з її допомогою програмні продукти, можуть функціонувати під практично будь-якою операційною системою типу Windows 95, 98, 2000 NT,XP, Vista, 7.

Про Visual Studio 2008 Express говорять як про середовище швидкого створення програм. Це технологія візуального програмування, тобто користувач оформляє свою майбутню програму, і бачить результати своєї роботи ще до запуску самої програми.

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

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

1. ПОСТАНОВКА ЗАВДАННЯ

 

1.1 Найменування та галузь використання


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

1.2 Підстава для створення


Підставою для розробки є наказ № 73С-01 від 29 жовтня 2009 р. по Криворізькому інституту КУЕІТУ.

Початок робіт: 01.11.09. Закінчення робіт: 25.05.10.

1.3 Характеристика розробленого програмного забезпечення


В ході досліджень була створена система для аналізу властивостей алгоритмів кодування даних на прикладі конкретного файлу. Розроблена система реалізована в середовищі Visual Studio 2008 Express. Система повинна функціонувати під керуванням операційної системи Windows ХР.

Вхідною інформацією для розробленої системи є файл.

Головним завданням системи є аналіз властивостей алгоритмів кодування даних. Вибір алгоритму кодування залишається за людиною.

Другим завданням системи є кодування даних різними алгоритмами кодування даних. Також є можливість зробити цифровий підпис файлу двома різними алгоритмами хешування даних.

1.4 Мета й призначення


Метою дипломної роботи є дослідження та проведення порівняльного аналізу алгоритмів кодування даних.

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

1.5 Загальні вимоги до розробки


Вимоги до програмного забезпечення:

·        Робота в середовищі операційних систем Windows;

·        Простота й зрозумілість інтерфейсу.

Мінімальні вимоги до апаратного забезпечення:

·        IBM-сумісний комп'ютер, не нижче Pentium IІ, RAM-128Mb, SVGA-800*600*16bit;

·        Вільний простір на жорсткому диску не менш 4 Мб.

1.6 Джерела розробки


Джерелами розробки дипломної роботи є:

·        загальний опис алгоритмів кодування даних;

·        довідкова література;

·        наукова література;

·        технічна література;

·        програмна документація.

2. Дослідження мови програмування С#


За пару останніх років комп'ютерний світ кілька зійшов з уторованим шляхом, перейди від концепції програмування для окремих систем до створення інтерактивного мережевого оточення. Багато років між комп'ютерними мовами, операційними системами і засобами розробки велася боротьба за ринок збуту, але для більшості з них «мережею як і раніше залишаються один комп'ютер». Тепер же перед сучасною мовою програмування стоять абсолютно нові завдання, для вирішення яких і було розроблено мову С#, що є наступною сходинкою

В еволюції мов програмування. Від своїх попередників взяв вагу найкраще, об'єднав новітні розробки в галузі проектування мов програмування. У першу чергу С# увібрав в себе кращі якості C + + і Java - двох найбільш широко використовуваних мов. Крім того, до нього включені такі інноваційні елементи, як делегати (delegates) і індексатори (indexers). А оскільки С# використовує засоби системи .NET Framework, його код є найвищою мірою стерпним і може бути використаний при розробці програмних комплексів в багатомовному середовищі. Компоненти програмного забезпечення, створені з використанням С#, сумісні з кодом, який написаний на інших мовах, якщо він також призначений для-Net Framework.

С# програмування - це не тільки ключові слова і синтаксис, що визначає мову. Тут мова повинна йти і про використання бібліотеки .NET Framework Class Library яка дуже великою. С# - це нова мова. Подібно до всіх нових комп'ютерних мов, він повинен пройти період удосконалення і становлення. Історія мови С# тільки починається.

2.1 Історія створення мови С#


Хоча мова Java вирішив багато проблем переносимості програм з однієї платформи на іншу, все ж таки трива успішному роботи та сучасному Internet-оточенні йому бракує деяких властивостей, одним з яких є підтримка можливості взаємодії кількох комп'ютерних мов (багатомовного програмування). Під багатомовним програмуванням розуміється здатність коду, написаного на різних мовах, працювати спільно. Ця можливість дуже важлива при створенні великих програм, а також бажана при програмуванні окремих компонентів, які можна було б використовувати в багатьох комп'ютерних мовах і в різній операційному середовищі.

Щоб вирішити ці проблеми, компанія Microsoft в кінці 1990-х голів розробила мова С (головний архітектор мови Лідері Хейльсбсрг), що є складовою частиною загальної стратегії .NET цієї компанії. Альфа-версія мови була випущена в середині 2000 голи.

Мова С# безпосередньо пов'язаний з широко вживаними і найбільш популярними в усьому світі мовами програмування С, C++ і Java. Сьогодні практично вага професійні програмісти знають ці мови, тому перехід до базується на них С# відбувається без особливих труднощів-Хейльсберг, так само як автори мов C++ і Java, не «винаходити колесо», а пішов уторованим шляхом - використовуючи в якості фундаменту раніше створені мови, зосередився на поліпшення та інноваціях.

Генеалогічне древо С# показано на рис. 2.1. Мова С# будується на об'єктної моделі, яка була визначена в C++, а синтаксис, багато ключових слова та оператори він успадкував від мови С, Якщо ви знаєте ці мови програмування. то у вас не виникне проблем при вивченні С#.

Зв'язок між С і Java більш складна. Обидві мови розроблені для створення переносимого коду, базуються на С і C++, використовують їх синтаксис і об'єктну модель. Однак між цими мовами немає прямого зв'язку, вони більше схожі на двоюрідних братів, які мають спільних предків, але відрізняються багатьма ознаками. Якщо ви вмієте працювати на Java, це полегшить вам освоєння С#, і навпаки, при вивченні Java вам стане в нагоді знання багатьох концепций С#.

Мова С# містить багато інноваційні властивості, які будуть розглядатися в цій книзі. Відразу зауважимо, що деякі з його найбільш важливих нововведень ставляться до вбудованої підтримки компонентів програмного забезпечення. Тобто фактично С# створений як компонент но-орієнтована мова, що включає, наприклад, елементи (такі як властивості, методи і події), безпосередньо підтримують складові частини компонентів програмного забезпечення. Але мабуть, найбільш важлива нова характеристика С# - здатність працювати і багато мовному оточенні.

Рис. 2.1 Генеалогічне древо С#

В кінці 1970-х років настав момент, коли багато проектів досягли максимального розміру, доступного для обробки за допомогою мови структурного програмування С. Тепер були потрібні нові підходи, і для вирішення цієї проблеми було створено об'єктивно-орієнтоване програмування (ООП), що дозволяє програмістові працювати з програмами більшого об'єму. А оскільки С, який був у той час найпопулярнішою мовою, не підтримував ООП, виникла необхідність створення його об'єктивно-орієнтованої версії (названої пізніше С++).

Ця версія була розроблена в тій же компанії Bell Laboratories Б'ярне Страустрапом на початку 1979 року. Спочатку мова отримала назву «С з класами», але в 1983 році був перейменований в С++. Він повністю включає в себе мову С (тобто С служить фундаментом для С++) і містить нові можливості, призначені для підтримки об'єктивно-орієнтованого програмування. Фактично С++ є об'єктивно-орієнтованої версією мови С, тому програмістові, що знає С, при переході до програмування на С++ треба вивчити тільки нові концепції ООП, а не нову мову.

Довгий час мова С++ розвивався екстенсивно і залишався в тіні. На початку 1990-х років він починає застосовуватися масово і набуває величезну популярність, а до кінця десятиліття стає найбільш широко використовуваним мовою розробки програмного забезпечення, лідируючим і сьогодні.

Важливо розуміти, що розробка С++ не є спробою створення нової мови програмування, а лише удосконалює і доповнює вже досить успішний мову. Такий підхід, який став новим напрямком розвитку комп'ютерних мов, використовується і зараз.

2.2 Зв'язок С# з .NET Framework


Хоча C# як мова програмування може вивчатися ізольовано, краще розглядати його у взаємозв'язку з .NET Framework - середовищем, в якому він працює. Тому, що по-перше, C# початково був розроблений компанією Microsoft для створення коду .NET Framework, по-друге, .NET Framework визначає бібліотеки, що використовуються мовою C#. Оскільки вони так тісно пов'язані, важливо розуміти загальну концепцію .NET Framework та її значущість для C#.

.NET Framework визначає середовище, що підтримує розвиток та виконання платформонезалежних додатків. Вона допускає спільну роботу в додатку різних мов програмування, а також забезпечує переносимість програм і загальну модель програмування для Windows. Важливо відзначити, що .NET Framework не обмежена платформою Windows і написані для цієї платформи програми можуть бути в майбутньому перенесені на інші платформи.

Мова С# використовує дві важливі складові .NET Framework. Перша - це не залежних від мови середовище виконання (Common Language Runtime, CRL), система, що управляє виконанням вашої програми, і що є частиною технології .NET Framework, яка дозволяє програмам бути стерпним, підтримує програмування з використанням декількох мов і забезпечує безпеку передачі даних.

Друга складова - бібліотека класів .NET Framework, яка дає програмі доступ до середовища виконання, наприклад, використовується для вводу / виводу даних. Якщо ви початківець, то вам може бути не знайомий термін клас. Класом є об'єктивно-орієнтована конструкція, яка допомагає організувати програму. Поки ваша програма обмежена характеристиками, де підтримується середовище виконання .NET Framework.

Усі переваги керованого коду забезпечуються CLR. Якщо ж ваш код буде використовуватися програмами, написаними на інших мовах, для максимальної сумісності необхідно дотримуватися спільної мовної специфікації (Common Language Specification, CRL). Ця специфікація описує набір характеристик, які є загальними для різних мов. Відповідність коду спільної мовної специфікації особливо важливо при створенні компонентів програмного забезпечення, які будуть використовуватися іншими мовами. Якщо в майбутньому вам доведеться створювати комерційний код, то ви повинні будете дотримуватися специфікації CRL, тому ми провели інформацію про неї в даному розділі.

2.3 Об'єктивно-орієнтоване програмування


Мова С# базується на принципах об'єктивно-орієнтованого програмування (ООП), і всі С# - програми є в якійсь мірі об'єктивно-орієнтованими. Тому для написання навіть найпростішої С# - програми дуже важливо знати принципи ООП.

ООП є потужною технологією виконання завдань, з якими доводиться стикатися програмістам. З часів винаходу комп'ютера методи програмування значно змінилися. Протягом розвитку комп'ютерної науки фахівцям в основному доводилося вирішувати питання, пов'язані зі збільшенням складності програм. Наприклад, на перших комп'ютерах програмування здійснювалося за допомогою зміни довічних машинних інструкцій, при цьому використовувалися елементи управління передній панелі комп'ютера. Такий метод добре працював, поки обсяг програм обмежувався кількома сотнями інструкцій. Коли ж обсяг використовуваного коду виріс, був винайдений мова асемблера, і програміст, використовуючи символічне представлення машинних інструкцій, вже зміг працювати з більш складними і громіздкими програмами. Потім, пристосовуючись до зростання обсягу та складності програм, програмісти розробили високорівневі мови, такі як FORTRAN і COBOL. Коли ж ці ранні мови досягли межі своїх можливостей, було винайдено структурне програмування.

На кожному етапі розвитку програмуванні створювалися технології та інструменти, що дозволяють програмісту вирішувати все більш складні завдання. З кожним кроком на цьому шляху нові технології вбирали в себе все найкраще від попередніх. Настав момент, коли багато проектів наблизилися в тієї межі, де структурне програмування вже не могло невідповідність встановленим вимогам, і виникла необхідність у принципово нової прогресивної технології, якої і стало об'єктивно-орієнтоване програмування.

ООП увібрав в себе кращі ідеї структурного програмування і об'єднало їх з кількома новими концепціями, в результаті чого з'явився новий спосіб організації програм. Не вдаючись в подробиці, можна сказати, що програма складається одним із двох способів: навколо свого коду або навколо своїх даних. При використанні технологи структурного програмування програми зазвичай організовуються навколо коду. Такий метод можна розглядати як «код, що впливає на дані».

У ООП програми працюють іншим способом. Вони організовані навколо даних, і їх ключовий принцип можна сформулювати як «контрольований даними доступ до коду». У об'єктивно-орієнтованої мови ви визначаєте дані, а також процедури, які можуть впливати на ці дані (тобто саме тип даних задає види операцій, які можуть бути застосовані до цих даних).

Для підтримки принципів об'єктивно-орієнтованого програмування у всіх мов ООП, включаючи С#, є спільні риси - інкапсуляція, поліморфізм й спадкування.

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

У межах код, дані або і код, і дані можуть бути або закритими для інших об'єктів (private), або відкритими (public).

Закриті код і дані відомі і доступні з іншої частини тільки цього ж об'єкта (тобто до закритого коду і даних не може бути здійснений доступ їх тій частині програми, яка існує за межами даного об'єкта). Коли ж код і дані відкриті (оголошені в рамках якого-небудь об'єкта як public), інші частини програми теж мають можливість з ними працювати. Зазвичай частини об'єкта, оголошені як public, використовуються для забезпечення контрольованого інтерфейсу з закритими елементами об'єкта.

У C# основною структурою, що використовує інкапсуляцію, є клас, специфікують як дані, так і код, який буде працювати з даними. Мова C# застосовує специфікацію класів для конструювання об'єктів, що є екземплярами класів. Отже, клас фактично є набором інструкцій, в яких зазначено, як має бути створений об'єкт.

Код і складові клас дані називаються змінними екземпляра. Фрагменти коду, які працюють з цими даними, називаються методами члена класу або просто методами. У C# термін метод прийнятий для програми, яку в С/С++ програмісти називають функцією (оскільки C# є прямим спадкоємцем С++, то іноді використовується і термін функція).

Поліморфізм (від грецького «безліч форм») є властивістю, що дозволяє декількох об'єктах, що мають деякі загальні характеристики, отримувати доступ до одного інтерфейсу й реалізовувати згадані в ньому методи. У якості простого прикладу розглянемо загальні кермо автомобіля. Кермо (інтерфейс) залишається однаковим незалежно від того, який тип рульового механізму фактично використовується. Тобто принцип роботи керма завжди залишається незмінним (наприклад, поворот рульового колеса завжди призводить до повороту автомобіля вліво), хоча на автомобілі може бути встановлено ручне керування або рульове керування з підсилювачем. Переваги уніфікованого інтерфейсу полягає і в тому, що якщо ви один раз навчилися водити автомобіль, то зможете керувати будь-яким типом автомобіля.

Той же принцип може бути застосований в програмуванні. Наприклад, розглянемо стек - список типу LIFO (last in, first out). Ви можете працювати з програмою, якої потрібно три стека різних типів (один для цілочисельних значень, один для значень з плаваючою комою і один для символів). У цьому випадку для реалізації кожного стека використовується один і той же алгоритм, хоча зберігаються дані різні. У не об'єктивно-орієнтованої мови вам знадобилося б створювати три різних набору стековий процедур з власним ім'ям для кожного набору. А в С# завдяки поліморфізму можна створити загальний набір стековий процедур, які підійдуть для роботи з усіма трьома типами стеків. Таким чином, визначивши методи, що використовують один тип стека, ви зможете застосовувати їх і для інших типів.

Узагальнено концепцію поліморфізму можна виразити як: «один інтерфейс - безліч методів». Це означає, що для групи схожих процесів можна створити уніфікований інтерфейс. Поліморфізм дозволяє зменшувати складність програм шляхом використання єдиного інтерфейсу для специфікації загального класу дій. Стосовно до кожної ситуації компілятор сам вибирає специфічну дію (тобто метод), позбавляючи вас від необхідності робити це вручну.

Успадкування - це властивість, за допомогою якого один об'єкт може набувати властивості іншого. При цьому підтримується концепція ієрархічної класифікації, що має напрям зверху вниз. Наприклад, можна сказати, що клас Смачне_Червоне_яблуко є частиною класу яблука, який у свою чергу є частиною класу фрукти, що належить класу продукти. Тобто клас продукти володіє певними якостями (їстівні, живильні і так далі), які також застосовні до його підкласу фрукти. На додаток до цим якостям клас фрукти має свої специфічні характеристики (соковиті, солодкі і так далі), що відрізняють його від інших продуктів. Клас яблука визначає якості, які притаманні яблукам (ростуть на дереві, не є тропічними фруктами і так далі). Клас Смачне_Червоне_яблуко у свою чергу успадковує всі якості попередніх класів і визначає лише ті якості, які роблять його унікальним.

Без використання успадкування кожен об'єкт повинен явно визначати всі свої характеристики; використовуючи спадкування, об'єкт повинен визначити тільки т якості, які роблять його унікальним в межах свого класу. Він може успадковувати загальні атрибути від своїх батьківських класів. Отже, саме механізм успадкування дає можливість одному об'єкту бути специфічними примірником свого класу.

2.4 Два керуючих оператора


Усередині методу відбувається послідовне виконання операторів у напрямку зверху вниз (тобто так, як вони були записані в даному блоці коду).

Можливо вибірково виконати частину програми за допомогою умовного оператора if. Цей оператор багато в чому схожий з оператором if іншої мови. Зокрема, він синтаксично ідентичний оператору if в мовах С, C++ і Java. Найпростіша його форма представлена нижче:(умова) оператор;

Тут умова - це логічне значення вираз (що має значення true або false). Якщо умова істинна, то оператор виконується, якщо умова помилково, то оператор пропускається. Наведемо приклад використання умовного оператора if:(10 <11) Console. WriteLine ("10 менше ніж 11");

У цьому випадку число 10 менше, ніж число 11 (умовний вираз істинно), отже, оператор WriteLine (); буде виконуватися.

Таблиця 2.1

Оператор

Опис

Менше ніж

< =

Менше чи рівно

Більше ніж

> =

Більше чи рівно

= =

Рівно

!=

Не рівно


Можливо багаторазово виконувати будь-яку послідовність коду (блок), визначивши цикл. У цьому розділі ми розглянемо цикл for. У С# цей цикл працює також, як і в С, С++ і Java. Самий простий синтаксис циклу for:(ініціалізація, умова, ітерація) оператор;

У загальноприйнятій формі частина з'явилась, що відповідає за його ініціалізацію, присвоює змінної циклу деякий початкове значення. Умова є булевих виразом, перевіряльникам змінну циклу. Якщо результатом цього тесту є значення true, цикл for виконується далі, якщо - false, відбувається природне завершення роботи циклу. Ітераційне вираз визначає, як змінюється контрольна мінлива циклу при кожному його виконанні.

3. ДОСЛІДЖЕННЯ АЛГОРИТМІВ КОДУВАННЯ

 

3.1 Алгоритм Triple DES

 

.1.1 Історія створення алгоритму Triple DES

Triple DES (3DES) - симетричний блоковий шифр, створений Уітфілд Діффі, Мартіном Хеллманом і Уолтом Тачманном в 1978 році на основі алгоритму DES, з метою усунення головного недоліку останнього - малої довжини ключа (56 біт), який може бути зламаний методом повного перебору ключа. Швидкість роботи 3DES в 3 рази нижча, ніж у DES, але криптостійкість набагато вище - час, необхідний для крипто аналізу 3DES, може бути в мільярд разів більше, ніж час, потрібний для розтину DES. 3DES використовується частіше, ніж DES, який легко ламається за допомогою сьогоднішніх технологій (в 1998 році організація Electronic Frontier Foundation, використовуючи спеціальний комп'ютер DES Cracker, розбила DES за 3 дні). 3DES є простим способом усунення недоліків DES. Алгоритм 3DES побудований на основі DES, тому для його реалізації можливо використовувати програми, створені для DES.

3.1.2 Алгоритм

Схема алгоритму 3DES представлена на рис 3.1. Простий варіант 3DES можна представити так:

(k3; DES (k2; DES (k1; M)))   (3.1)

де k1, k2, k3 - ключі для кожного DES-кроку, М - вхідні дані, які потрібно шифрувати.

Це варіант відомий як в ЕЕЕ, оскільки три DES операції є шифруванням.

Існує 3 типи алгоритму 3DES:

·        DES-EEE3: Шифрується три рази з трьома різними ключами (операції шифрування-шифрування-шифрування).

·        DES-EDE3: 3DES операції шифровка-розшифровка-шифровка з трьома різними ключами.

·        DES-EEE2 і DES-EDE2: Як і попередні, за винятком того, що на першому і третьому кроці використовується однаковий ключ.

Самий популярна різновид 3DES - це DES-EDE3, для нього алгоритм виглядає так:

Шифровка:

     (3.2)

Розшифровка:

              (3.3)

При виконанні алгоритму 3DES ключі можуть бути вибрані так:

·        k1, k2, k3 незалежні.

·        k1, k2 незалежні, а k1 = k3

·        k1 = k2 = k3

DES виконує 3 рази алгоритм DES, довжина ключа DES дорівнює 64 біта, а довжина 3DES в 3 рази більше, тобто дорівнює 192 бітів.

Для DES 64-розрядний ключ ділився на 8 байтів, в кожному байті використовується тільки 7 бітів, тому насправді довжина ключа дорівнює 56 бітів, а не 64, тому довжина ключа 3DES насправді дорівнює 168, а не 192 біта.

Рис 3.1 Схема алгоритму 3DES

3.1.2 Криптостійкість

3DES з різними ключами має довжину ключа рівну 168 біт, але через атаки «зустріч посередині» (англ. meet-in-the-middle) ефективна криптостійкість складає тільки 112 біт. У варіанті DES-EDE, в якому k1 = k3, ефективний ключ має довжину 80 біт. Для успішної атаки на 3DES потрібно близько 232 біт відомого відкритого тексту, 2113 кроків, 290 циклів DES-шифрування і 288 біт пам'яті.

Застосування 3DES

DES з трьома ключами реалізований у багатьох додатках, орієнтованих на роботу з Інтернет, у тому числі в PGP й S / mime. Потрійний DES є досить популярною альтернативою DES і використовується при управлінні ключами в стандартах ANSI X9.17 та ISO 8732 і у PEM (Privacy Enhanced Mail). Відомих криптографічних атак, застосовних на практиці, на 3DES не існує.

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

 

3.2 Алгоритм DES

 

.2.1 Історія створення алгоритму DES

У 1972 році, після проведення дослідження потреб уряду США в комп'ютерній безпеці, американське НБС (Національне Бюро Стандартів) - тепер перейменовано НІСТ (Національний Інститут Стандартів і Технологій) - визначив необхідність в общеправітельственном стандарті шифрування некритичною інформації. 15 травня 1973, після консультації з АНБ (Агентством національної безпеки), НБС оголосило конкурс на шифр, який задовольнить суворим критеріям проекту, але жоден конкурсант не забезпечував виконання всіх вимог. Другий конкурс було розпочато 27 серпня 1974. Цього разу, шифр Lucifer, представлений IBM і розвинений протягом періоду 1973-1974 визнали прийнятним, він був заснований на більш ранньому алгоритмі Хорста Фейстеля.

березня 1975 запропонований алгоритм DES був виданий у Федеральному реєстрі. У наступному році було проведено 2 відкритих симпозіуму з обговорення цього стандарту, де піддалися жорсткій критиці зміни, внесені АНБ в алгоритм: зменшення первісної довжини ключа і S-блоки (блоки підстановки), критерії проектування яких не розкривалися. АНБ підозрювалися у свідомому ослабленні алгоритму з метою, щоб АНБ могло легко переглядати зашифровані повідомлення. Після чого сенатом США була проведена перевірка дій АНБ, результатом якої стала заява, опубліковане в 1978, в якому йшлося про те, що в процесі розробки DES АНБ переконало IBM, що зменшеної довжини ключа більш ніж достатньо для всіх комерційних додатків, що використовують DES, побічно допомагало в розробці S-перестановок, а також, що остаточний алгоритм DES був кращим, на їх думку, алгоритмом шифрування і був позбавлений статистичної або математичної слабкості. Також було виявлено, що АНБ ніколи не втручався в розробку цього алгоритму.

Частина підозр у прихованій слабкості S-перестановок була знята в 1990, коли були опубліковані результати незалежних досліджень Елі Біхама (Eli Biham) і Аді Шаміра (Adi Shamir) за диференційного криптоаналізу - основного методу злому блочних алгоритмів шифрування з симетричним ключем. S-блоки алгоритму DES виявилися набагато більш стійкими до атак, ніж, якщо б їх обрали випадково. Це означає, що така техніка аналізу була відома АНБ ще в 70-х роках XX століття.є блоковим шифром. Щоб зрозуміти, як працює DES, необхідно розглянути принцип роботи блочного шифру, мережа Фейстеля.

3.2.2 Блочний шифр

Вхідними даними для блочного шифру служать блок розміром n біт і k-бітний ключ. На виході, після застосування шифрувальної перетворення, виходить n-бітний зашифрований блок, причому незначні відмінності вхідних даних як правило призводять до істотної зміни результату. Блокові шифри реалізуються шляхом багаторазового застосування до блоків вихідного тексту деяких базових перетворень.

Базові перетворення:

• Складне перетворення на одній локальної частини блоку.

• Просте перетворення між частинами блоку.

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

3.2.3 Перетворення Мережею Фейстеля

Це перетворення над векторами (блоками) представляють собою ліву і праву половини регістра зсуву. В алгоритмі DES використовуються пряме перетворення мережею Фейстеля в шифруванні (див. рис.3.2) і зворотне перетворення мережею Фейстеля в розшифрування (див. рис.3.3).

 </wiki/%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A1%D0%B5%D1%82%D1%8C%D0%A41.PNG>

Рис.3.2 Пряме перетворення мережею Фейстеля

 </wiki/%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A1%D0%B5%D1%82%D1%8C%D0%A42.PNG>

Рис.3.3 Зворотне перетворення мережею Фейстеля

3.2.4 Схема шифрування алгоритму DES


 </wiki/%D0%A4%D0%B0%D0%B9%D0%BB:DES_algorithm_scheme.png>

Рис.3.4 Схема шифрування алгоритму DES

Схема шифрування алгоритму DES вказана на рис.3.4

Оригінальний текст - блок 64 біт.

Процес шифрування полягає в початковій перестановці, 16 циклах шифрування і кінцевої перестановці.

Зашифрований текст - блок 64 біт.

Розглянемо докладну схему алгоритму DES:

 </wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Code.PNG>

Рис.3.5 Детальна схема шифрування алгоритму DES

 ліва і права половини 64-бітового блоку LiRi- 48 бітові ключі, f - функція шифрування, IP - початкова перестановка, IP - 1 - кінцева перестановка.

Початкова перестановка

-        Оригінальний текст T (блок 64 біт) перетворюється c допомогою початкової перестановки IP (Initial Permutation), яка визначається таблицею 3.1:

Таблиця 3.1 Початкова перестановка IP

58

50

42

34

26

18

10

2

60

52

44

36

28

20

12

4

62

54

46

38

30

22

14

6

64

56

48

40

32

24

16

8

57

49

41

33

25

17

9

1

59

51

43

35

27

19

3

61

53

45

37

29

21

13

5

63

55

47

39

31

23

15

7


Таблиця 3.1 Початкова перестановка IPПо таблиці перші 3 біти результуючого блоку IP (T) після початкової перестановки IP є бітами 58, 50, 42 вхідного блоку Т, а його 3 останні біта є бітами 23, 15, 7 вхідного блоку.

3.2.5 Цикли шифрування

Отриманий після початкової перестановки 64-бітовий блок IP (T) бере участь у 16-циклах перетворення Фейстеля.

16 циклів перетворення Фейстеля:

Розбити IP (T) на дві частини L0, R0, де L0, R0 - відповідно 32 старших бітів і 32 молодших бітів блоку T0 IP (T) = L0R0

Нехай T i - 1 = L i - 1 R i - 1 результат (i-1) ітерації, тоді результат i-ой ітерації T i = Li R i визначається:

i = R i - 1

  (3.4)

Ліва половина L i дорівнює правій половині попереднього вектора Li - 1 R i - 1. А права половина R i - це бітове складання L i - 1 і f (R i - 1, k i ) за модулем 2.

У 16-циклах перетворення Фейстеля функція f грає роль шифрування. Розглянемо докладно функцію f.

Основна функція шифрування (функція Фейстеля)

Аргументами функції f є 32-бітовий вектор R i - 1 і 48-бітова ключ ki , які є результатом перетворення 56-бітового вихідного ключа шифру k.

Для обчислення функції f використовуються функція розширення Е, перетворення S, що складається з 8 перетворень S-блоків , і перестановка P.

Функція Е розширює 32-бітовий вектор R i - 1 до 48-бітового вектора E(R i - 1) шляхом дублювання деяких бітів з R i - 1; при цьому порядок бітів вектора E (R i - 1) вказаний у таблиці 3.2.

Таблиця 3.2

32

1

2

3

4

5

4

5

6

7

8

9

8

9

10

11

12

13

12

13

14

15

16

17

16

17

18

19

20

21

20

21

22

23

24

25

24

25

26

27

28

29

28

29

30

31

32

1


Перші три біти вектора E (R i - 1) є бітами 32, 1, 2 вектора R i - 1. З таблиці 3.2 видно, що біти 1, 4, 5, 8, 9, 12, 13, 16, 17, 20, 21, 24, 25, 28, 29, 32 дублюються. Останні 3 біти вектора E (R i - 1 ) - це біти 31, 32, 1 вектора R i - 1. Отриманий після перестановки блок E (R i - 1) складається за модулем 2 з ключами ki і потім представляється у вигляді восьми послідовних блоків B1, B2, ... B8.

(R i - 1) = B1B2 ... B8                                                    (3.5)

Кожен Bj є 6-двійкового блоком. Далі кожен з блоків B j трансформується в 4-бітовий блок B' j за допомогою перетворень S j. Перетворення S j визначаються таблицею 3.3

 </wiki/%D0%A4%D0%B0%D0%B9%D0%BB:FuncFFF.PNG>

Рис.3.6 Схема роботи функції f

Таблиця 3.3

Перетворення S j


0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15



0

14

4

13

1

2

15

11

8

3

10

6

12

5

9

0

7


1

0

15

7

4

14

2

13

1

10

6

12

11

9

5

3

8

S1

2

4

1

14

8

13

6

2

11

15

12

9

7

3

10

5

0


3

15

12

8

2

4

9

1

7

5

11

3

14

10

0

6

13



0

15

1

8

14

6

11

3

4

9

7

2

13

12

0

5

10


1

3

13

4

7

15

2

8

14

12

0

1

10

6

9

11

5

S2

2

0

14

7

11

10

4

13

1

5

8

12

6

9

3

2

15


3

13

8

10

1

3

15

4

2

11

6

7

12

0

5

14

9



0

10

0

9

14

6

3

15

5

1

13

12

7

11

4

2

8


1

13

7

0

9

3

4

6

10

2

8

5

14

12

11

15

1

S3

2

13

6

4

9

8

15

3

0

11

1

2

12

5

10

14

7


3

1

10

13

0

6

9

8

7

4

15

14

3

11

5

2

12



0

7

13

14

3

0

6

9

10

1

2

8

5

11

12

4

15


1

13

8

11

5

6

15

0

3

4

7

2

12

1

10

14

9

S4

2

10

6

9

0

12

7

13

15

1

3

14

5

2

8

4


3

3

15

0

6

10

1

13

8

9

4

5

11

12

7

2

14



0

2

12

4

1

7

10

11

6

8

5

3

15

13

0

14

9


1

14

11

2

12

4

7

13

1

5

0

15

10

3

9

8

6

S5

2

4

2

1

11

10

13

7

8

15

9

12

5

6

3

0

14


3

11

8

12

7

1

14

2

13

6

15

0

9

10

4

5

3



0

12

1

10

15

9

2

6

8

0

13

3

4

14

7

5

11


1

10

15

4

2

7

12

9

5

6

1

13

14

0

11

3

8

S6

2

9

14

15

5

2

8

12

3

7

0

4

10

1

13

11

6


3

4

3

2

12

9

5

15

10

11

14

1

7

6

0

8

13



0

4

11

2

14

15

0

8

13

3

12

9

7

5

10

6

1


1

13

0

11

7

4

9

1

10

14

3

5

12

2

15

8

6

S7

2

1

4

11

13

12

3

7

14

10

15

6

8

0

5

9

2


3

6

11

13

8

1

4

10

7

9

5

0

15

14

2

3

12



0

13

2

8

4

6

15

11

1

10

9

3

14

5

0

12

7


1

1

15

13

8

10

3

7

4

12

5

6

11

0

14

9

2

S8

2

7

11

4

1

9

12

14

2

0

6

10

13

15

3

5

8


3

2

1

14

7

4

10

8

13

15

12

9

0

3

5

6

11



Припустимо, що B3 = 101111, і ми хочемо знайти B'3 . Перший і останній розряди B3 є двійковій записом числа а, 0 <= a <= 3, середні 4 розряду представляють число b, 0 <= b <= 15. Рядки таблиці S3 нумеруються від 0 до 3, стовпці таблиці S3 нумеруються від 0 до 15. Пара чисел (а, b) визначає число, що знаходиться в перетині рядка і стовпця а b. Двійкове подання цього числа дає B' 3. У нашому випадку a = 112 = 3, b = 01 112 = 7, а число, яке визначається парою (3,7), дорівнює 7. Його бінарне подання B'3 = 0111.

Значення функції f (R i - 1, k i ) (32 біт) виходить перестановкою Р, що застосовується до 32-бітове блоку B'1 B'2 ... B'8 . Перестановка Р задана таблицею 3. 4.

Таблиця 3. 4

16

7

20

21

29

12

28

17

1

15

23

26

5

18

31

10

2

8

24

14

32

27

3

9

19

13

30

6

22

11

4

25

(R i - 1, k i ) = P (B'1B'2 ... B'8 ) (3.6)

Згідно таблиці 3. 4, перші чотири біта результуючого вектора після дії функції f - це біти 16, 7, 20, 21 вектора B'1B'2 ... B'8

3.2.6 Генерування ключів ki

Ключі ki виходять з початкового ключа k (64 біт = 8 байтів або 8 символів у ASCII) таким чином. Вісім бітів, що знаходять в позиціях 8, 16, 24, 32, 40, 48, 56, 64 додаються в ключ k таким чином щоб кожен байт містив непарне число одиниць. Це використовується для виявлення помилок при обміні і зберіганні ключів. Потім роблять перестановку для розширеного ключа (крім додаються бітів 8, 16, 24, 32, 40, 48, 56, 64). Така перестановка визначена як у таблиці 3.5.

Таблиця 3. 5

57

49

41

33

25

17

9

1

50

42

34

26

18

C0

10

2

59

51

43

35

27

19

11

3

60

52

44

36


63

55

47

39

31

23

15

7

62

54

46

38

30

22

D0

14

6

61

53

45

37

29

21

13

5

28

20

12

4



Ця перестановка визначається двома блоками C0 і D0 по 28 біт кожен. Перші 3 біти C0 є біти 57, 49, 41 розширеного ключа. А перші три біти D0 є біти 63, 55, 47 розширеного ключа. Ci, Di i = 1,2,3 ... виходять з Ci - 1, Di - 1 одним або двома лівими циклічними зсувами згідно з таблицею 3. 6.

Таблиця 3. 6

i

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

Число зсуву

1

1

2

2

2

2

2

2

1

2

2

2

2

2

2

1


Ключ k i , i = 1, ... 16 складається з 48 біт, вибраних з бітів вектора C i D i (56 біт) згідно з таблицею 3. 7. Перший і другий біти k i є біти 14, 17 вектора C i D i

Таблиця 3. 7

14

17

11

24

1

5

3

28

15

6

21

10

23

19

12

4

26

8

16

7

27

20

13

2

41

52

31

37

47

55

30

40

51

45

33

48

44

49

39

56

34

53

46

42

50

36

29

32


3.2.7 Кінцева перестановка

Кінцева перестановка IP - 1 діє на T16 і використовується для відновлення позиції. Вона є зворотною до перестановки IP. Кінцева перестановка визначається таблицею 3.8.

Таблиця 3. 8

40

8

48

16

56

24

64

32

39

7

47

15

55

23

63

31

38

6

46

14

54

22

62

30

37

5

45

13

53

21

61

29

36

4

44

12

52

20

60

28

35

3

43

11

51

19

59

27

34

2

42

10

50

18

58

26

33

1

41

9

49

17

57

25


3.2.8 Схема розшифрування

При розшифрування даних всі дії виконуються в зворотному порядку. У 16 циклах розшифрування, на відміну від шифрування c допомогою прямого перетворення мережею Фейстеля, тут використовується зворотне перетворення мережею Фейстеля.

i - 1 = Li                                             (3.7)

 (3.8)

Схема розшифрування вказана на Рис.6. Ключ k i , i = 1, ..., 15, функція f, перестановка IP і IP - 1 такі ж як і в процесі шифрування.

 </wiki/%D0%A4%D0%B0%D0%B9%D0%BB:Decode.PNG>

Рис.3.9 Схема розшифрування алгоритму DES

3.2.9 Режими використання DES

Основна стаття: Режим шифрування. DES може використовуватися в чотирьох режимах.

1.       Режим електронної кодової книги (ЕCB - Electronic Code Book): звичайне використання DES як блокового шифру. Шіфруемий текст розбивається на блоки, при цьому, кожен блок шифрується окремо, не взаємодіючи з іншими блоками (див. рис 3.10).

 <file:///D:\wiki\%25D0%25A4%25D0%25B0%25D0%25B9%25D0%25BB:ECB1.JPG>

Рис.3.10 Режим електронної кодової книги - ECB

2.       Режим зчеплення блоків (СВС - Cipher Block Chaining) (див. рис.3.11). Кожен черговий блок C i i > = 1, перед зашіфровиваніем складається за модулем 2 з наступним блоком відкритого тексту M i + 1. Вектор C0 - початковий вектор, він змінюється щодня і зберігається в секреті.

 <file:///D:\wiki\%25D0%25A4%25D0%25B0%25D0%25B9%25D0%25BB:CBC.PNG>

Рис.3.11 Режим зчеплення блоків - СВС

3.       Режим зворотного зв'язку по шіфротексту (CFB - Cipher Feed Back) (див. рис.3.12). У режимі СFB виробляється блокова «гамма»

Z0, Z1, ... Zi = DES k (C i - 1) .(3.9)

Початковий вектор C0 зберігається в секреті.

 <file:///D:\wiki\%25D0%25A4%25D0%25B0%25D0%25B9%25D0%25BB:Cfb-des.ru.svg>

Рис.3.12 Режим зворотного зв'язку по шіфротексту - CFB

4.       Режим зворотного зв'язку по виходу (OFB - Output Feed Back) (див. рис.3.13). У режимі OFB виробляється блокова «гамма» Z0, Z1, ... ,  (3.10)

 <file:///D:\wiki\%25D0%25A4%25D0%25B0%25D0%25B9%25D0%25BB:OFB.PNG>

Рис.3.13 Режим зворотного зв'язку по виходу - OFB

Переваги і недоліки режимів:

• Режим ECB простий в реалізації, але можливе проведення криптоаналізу за словником.

• В режимах ECB і OFB спотворення при передачі одного 64-бітового блоку шіфротекста Ci призводить до спотворення після розшифрування тільки відповідного відкритого блоку M i, тому такі режими використовується для передачі по каналах зв'язку з великим числом спотворень.

• В режимах CBC та CFB спотворення при передачі одного блоку шифрованого тексту Сі призводить до спотворення на приймачі не більше двох блоків відкритого тексту M i , M i + 1 .Зміна M i призводить до зміни всіх інших блоків M i + 1, M i + 2 ... Ця властивість використовується для вироблення коду аутентифікації повідомлення.

3.2.10 Криптостійкість алгоритму DES

Нелінійність перетворень в DES засобами лише S-блоків, у випадку, якщо вони мають слабину, дозволяє здійснювати контроль за шифрованого листуванням. Вибір S-блоків вимагає дотримання кількох умов:

• Кожен рядок кожного блоку має бути перестановкою множини {0,1,2, ... ..., 15}

• S-блоки не повинні бути лінійною або Афіною функцією своїх аргументів.

• Зміна одного біта на вході S-блоку повинно приводити до зміни принаймні двох бітів на виході.

• Для кожного S-блоку і будь-якого аргументу х значення S (x)  і повинні відрізнятися принаймні двома бітами.

З-за невеликого числа можливих ключів (усього 256), з'являється можливість їх повного перебору на швидкодіючої обчислювальної техніки за реальний час. У 1998 році The Electronic Foundation використовуючи спеціальний комп'ютер DES-Cracker, вдалося зламати DES за 3 дні. В алгоритмі DES існують слабкі і частково-слабкі ключі. Слабкими ключами називається ключі k такі що DES k (DES k (x)) = x, x - блок 64 біт. Частково-слабкі ключі - пари ключів (k1, k2) такі що DES k1 (DES k2 (x)) = x Відомі чотири слабких ключа, вони наведені в таблиці 3. 9. Для кожного слабкого ключа існує 232 «постійні точки», тобто таких 64-бітових блоків х, в яких

k (x) = x                                               (3.11)

Таблиця 3.9

Слабкі ключі (hexadecimal)

C0

D0

0101-0101-0101-0101

[0]28

[0]28

FEFE-FEFE-FEFE-FEFE

[1]28

[1]28

1F1F-1F1F-0E0E-0E0E

[0]28

[1]28

E0E0-E0E0-F1F1-F1F1

[1]28

[0]28


[0] 28 позначає вектор, що складається з 28 нульових бітів.

Існують 6 частково-слабких пар ключів, вони наведені в таблиці 3.10. Для кожного з 12 частково-слабких ключів існують 232 «анти-постійні точки», тобто такі блоки х, що

Таблиця 3.10 Шість частково-слабких пар ключів

C0

D0

Пари частково-слабких ключів

C0

D0

[01]14

[01]14

01FE-01FE-01FE-01FE,----FE01-FE01-FE01-FE01

[10]14

[10]14

[01]14

[01]14

1FE0-1FE0-1FE0-1FE0,----E0F1-E0F1-E0F1-E0F1

[10]14

[10]14

[01]14

[0]28

01E0-01E0-01F1-01F1,----E001-E001-F101-F101

[10]14

[0]28

[01]14

[1]28

1FFE-1FFE-0EFE-0EFE,----FE1F-FE1F-FE0E-FE0E

[0]28

[1]28

[0]28

[01]14

O11F-011F-010E-010E,----1F01-1F01-0E01-0E01

[0]28

[10]14

[1]28

[01]14

E0FE-E0FE-F1FE-F1FE,----FEE0-FEE0-FEF1-FEF1

[1]28

[10]14


Таблиця 3.11 Методи атаки

Методи атаки

Відомі відкр. тексти

Вибрані відкр. тексти

Об'єм пам'яті

Кількість операцій

Повний пошук

1

-

Незначний

255

Лінійний Криптоаналіз

243(85%)

-

Для тексту

243

Лінійний Криптоанализ

238(10%)

-

Для тексту

250

Диффер. Криптоанализ

-

247

Для тексту

247

Диффер. Криптоанализ

255

-

Для тексту

255


• Метод повного пошуку вимагає одну відому пару шифрованого і розшифрованого тексту, незначний обсяг пам'яті, і для його виконання потрібні 255 кроків.

• Диференціальний криптоаналіз - першу таку атаку на DES заявили Biham і Shamir. Ця атака вимагає шифрування 247 відкритих текстів обраних нападаючим, і для її виконання потрібні 247 кроків. Теоретично будучи крапкою розриву, ця атака непрактична через надмірні вимоги до підбору даних і складності організації атаки по обраному відкритому тексту. Самі автори цієї атаки Biham і Shamir заявили, що вважають DES захищеним для такої атаки.

• Лінійний криптоаналіз розроблений Matsui. Цей метод дозволяє відновити ключ DES з допомогою аналізу 243 відомих відкритих текстів, при цьому потрібно 243 кроків для виконання. Перший експериментальний криптоаналіз DES, заснований на відкритті Matsui, був успішно виконаний протягом 50 днів на автоматизованих робочих місцях 12 HP 9735.

Для лінійної та диференціальної атак потрібно досить великий обсяг пам'яті для збереження вибраних (відомих) відкритих текстів до початку атак.

3.2.11 Застосування

DES був національним стандартом США в 1977-1980 рр.., але в даний час DES використовується (з ключем довжиною 56 біт) тільки для застарілих систем , найчастіше використовують його більш кріптостійкий вигляд (3DES, 2DES). 3DES є простою ефективною заміною DES , і зараз він розглянутий як стандарт. Найближчим часом DES і Triple DES будуть замінені алгоритмом AES (Advanced Encryption Standard - розширений стандарт шифрування). Алгоритм DES широко застосовується для захисту фінансової інформації: так, модуль THALES (Racal) HSM RG7000 повністю підтримує операції TripleDES для емісії і обробки кредитних карт VISA, EuroPay та ін. Канальні шифратори THALES (Racal) DataDryptor 2000 використовують TripleDES для прозорого шифрування потоків інформації. Також алгогритм DES використовується в багатьох інших пристроях і рішеннях THALES-eSECURITY.

3.3 Дослідження алгоритму RC2

це блочний шифр з ключем змінної довжини створений Роном Рівестом для RSA. "RC" розшифровується як "Ron's Code" або "Rivest Cipher". RC2 швидше ніж DES і був спецально розроблений для заміни DES. Він може бути реалізований більш-менш захищеним ніж DES, залежно від довжини ключа. RC2 алгоритм конфіденціален і є власністю RSA. RC2 може використовуватися там, де використовується DES. У США довжина ключа для використання всередині країни рекомендується рівний 128 бітів, але угода, укладена між Software Publishers Association (SPA) і урядом США дає RC2 спеціальний статус, який означає, що дозволено експортувати шифри довгої ключа до 40 біт. 56-бітові ключі дозволено використовувати закордонним відділенням американських компаній. RC2 з ключами 128 біт забезпечує такий же рівень безпеки як і IDEA або потрійний DES. RC2 використовується широко розробниками, чиї продукти експортуються за межі США, оскільки експортувати DES заборонено.

3.3.1 Алгоритм RC2

RC2 складається з трьох частин: агорітм розширення ключа, алгоритм шифрування, алгоритм розшифровки.

У тексті алгоритму використовуються наступні позначення:

. Порозрядному виключає АБО, позначення "^".

. Порозрядному І, позначення "&"

. Порозрядному НЕ, позначення "~".

. Операція>>> - циклічний зсув вправо x на y

. Операція <<<- циклічний зсув вліво x на y

Розширення ключа.

Спочатку створюється 256-байтовий S-блок кожен i-й елемент якого виходить так:

[i] = Beale [i] mod 256 XOR pad [i],

де Beale [i] - елемент з шифру Beal (коду), pad [i] - елемент з шифру pad (коду). Далі відбувається розширення ключа до 128 байтам, ключ розширюється так, щоб заповнити 128 байтів (64 слова). При розширенні беруть суму першого і останнього байта ключа, шукають суму (mod 256) в S-блоці і додають результат у ключ. Операція повторюється з другим і останнім новим байтом поки ключ не буде сформований до 128. (див. рис 3.14.)

Рис.3.14 Формування ключа

Спочатку i = 0, а j = lengh (K) (довжині ключа K)j = 0 to length-1 do[j] = K [j]j = length to 127 do s [j] = sBox [(S [j-length] + S [j-1]) mod 256];

Останнім кроком змінюють перший байт ключа та байтом вибраним з S-блоку.[0] = sBox [S [0]]

Шифрування.

Шифрування являє собою додавання до тексту сформованого ключа та циклічного зсуву цієї суми. Шифр має 16 повних раундів, кожен розділений в 4 подраунда. Два з повних раундів виконують додаткове перетворення даних.i = 0 to 15 do j = i * 4;= (word0 + (word1 & ~ word3) + (word2 & word3) + S [j +0]) <<<1= (word1 + (word2 & ~ word0) + (word3 & word0) + S [j +1]) <<<2= (word2 + (word3 & ~ word1) + (word0 & word1) + S [j +2]) <<<3= (word3 + (word0 & ~ word2) + (word1 & word2) + S [j +3]) <<<5

Крім того п'яті і одинадцятий раунди додають зміст S-блоку, індексованої одним з слів даних до іншого після чотирьох подраундов наступним чином:= word0 + S [word3 & 63];= word1 + S [word0 & 63];= word2 + S [word1 & 63];= word3 + S [word2 & 63];

Розшифровка.

Операція розшифровки - просто інверсія операції шифрування.i = 15 downto 0 do j = i * 4;= (word3>>> 5) - (word0 & ~ word2) - (word1 & word2) - S [j +3]= (word2>>> 3) - (word3 & ~ word1) - (word0 & word1) - S [j +2]= (word1>>> 2) - (word2 & ~ word0) - (word3 & word0) - S [j +1]= (word0>>> 1) - (word1 & ~ word3) - (word2 & word3) - S [j +0]

Крім того п'яті і одинадцятий раунди віднімають утримання S-блоку, індексованої одним з слів даних з іншого після чотирьох подраундов наступним чином:= word3 - S [word2 & 63]= word2 - S [word1 & 63]= word1 - S [word0 & 63]= word0 - S [word3 & 63]

У даному алгоритмі можливі неточності на увазі конфіденційності цього алгоритму.

3.4 Дослідження алгоритму AES

Encryption Standard (AES), також відомий як Rijndael - симетричний алгоритм блочного шифрування (розмір блока 128 біт, ключ 128/192/256 біт), прийнятий в якості стандарту шифрування урядом США за результатами конкурсу AES. Цей алгоритм добре проаналізовано і зараз широко використовується, як це було з його попередником DES. Національний інститут стандартів і технологій США (англ. National Institute of Standards and Technology, NIST) опублікував специфікацію AES 26 листопада 2001 після п'ятирічного періоду, в ході якого були створені і оцінені 15 кандидатур. 26 травня 2002 AES було оголошено стандартом шифрування. За станом на 2006 рік AES є одним з найпоширеніших алгоритмів симетричного шифрування.

3.4.1 Опис AES

Визначення і допоміжні процедури наведенні в таблиці 3.12.

Таблиця 3.12

Block

Cipher Key

секретний, криптографічний ключ, який використовується Key Expansion процедурою, щоб справити набір ключів для раундів (Round Keys); може бути представлений як прямокутний масив байтів, що має чотири рядки і Nk колонок....

Ciphertext

вихідні дані алгоритму шифрування

Key Expansion

процедура використовується для генерації Round Keys з Cipher Key

Round Key

Round Keys виходять з Cipher Key використовуючи процедуру Key Expansion. Вони застосовуються до State при шифрування й розшифрування

State

проміжний результат шифрування, який може бути представлений як прямокутний масив байтів має 4 рядки і Nb колонок

S-box

нелінійна таблиця замін, що використовується в декількох трансформаціях заміни байт і в процедурі Key Expansion для взаімнооднозначной заміни значення байта

Nb

число стовпців (32-ох бітних слів), що становлять State. Для, AES Nb = 4

Nk

число 32-ох бітних слів, складових шіфроключ. Для AES, Nk = 4,6, або 8

Nr

число раундів, яке є функцією Nk і Nb. Для AES, Nr = 10, 12, 14

Rcon[]

масив, який складається з бітів 32-х розрядного слова і є постійним для даного раунду


Допоможні процедури наведенні в таблиці 3.13.

Таблиця 3.13

AddRoundKey()

Трансформація при шифровані і зворотнім шифровані, при якому Round Key XOR’ c State. Довжина RoundKey дорівнює розміру ( якщо Nb = 4, то довжина RoundKey дорівнює 128 біт або 16 байт)

InvMixColumns()

Трансформація при розшифровані яка стає оберненою по відношенню до MixColumns()

InvShiftRows()

Трансформація при розшифровані яка стає оберненою по відношенню до ShiftRows()

InvSubBytes()

при розшифровані яка стає оберненою по відношенню до SubBytes()

MixColumns()

Трансформація при шифровані яка бере всі колонки State і змішує їх данні (незалежно друг от друга ) щоб отримати нові колонки

RotWord()

Функція використана в процедурі Key Expansion, яка бере 4-x байтове слово і виробляє над ним циклічну перестановку

ShiftRows()

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

SubBytes()

трансформації при шифруванні які обробляють State використовуючи нелінійну таблицю заміщення байтів (S-box), застосовуючи її незалежно до кожного байту State

SubWord()

функція, яка використовується в процедурі Key Expansion, яка бере на вході чотирьох-байтним слово і застосовуючи S-box до кожного з чотирьох байтів видає вихідну слово


3.4.2 Шифрування

AES є стандартом, заснованим на алгоритмі Rijndael. Для AES довжина input (блоку вхідних даних) і State (стану) є сталою і дорівнює 128 біт, а довжина шіфроключа. K становить 128, 192, або 256 біт. При цьому, вихідний алгоритм Rijndael допускає довжину ключа і розмір блоку від 128 до 256 біт з кроком в 32 біта. Для позначення вибраних довжин input, State і Cipher Key в байтах використовується нотація Nb = 4 для input і State, Nk = 4, 6, 8 для Cipher Key відповідно для різних довжин ключів.

На початку шифрування input копіюється в масив State за правилом s [r, c] = in [r + 4c], для  і  . Після цього до State застосовується процедура AddRoundKey () і потім State проходить через процедуру трансформації (раунд) 10, 12, або 14 разів (залежно від довжини ключа), при цьому треба врахувати, що останній раунд дещо відрізняється від попередніх. У результаті, після завершення останнього раунду трансформації, State копіюється в output за правилом out [r + 4c] = s [r, c], для  і  .

Окремі трансформації SubBytes (), ShiftRows (), MixColumns (), і AddRoundKey () - обробляють State. Масив w [] - містить key schedule.

SubBytes().

 </wiki/%D0%A4%D0%B0%D0%B9%D0%BB:AES-SubBytes.svg>

Рис 3.15 Процедура SubBytes

В процедурі SubBytes, кожен байт в state вказується відповідний елементом у фіксованій 8-бітної таблиці пошуку, S; bij = S (aij)

Процедура SubBytes () обробляє кожен байт стану, незалежно виробляючи нелінійну заміну байтів використовуючи таблицю замін (S-box). Така операція забезпечує нелінійність алгоритму шифрування. Побудова S-box складається з двох кроків. По-перше, проводиться взяття зворотного числа в GF (28). По-друге, до кожного байту b з яких складається S-box застосовується така операція:

, де  і де bi є i-ий біт b, а c i - i-ий біт c = {63}або {01100011}. Таким чином, забезпечується захист від атак, заснованих на простих алгебраїчних властивостях.().

 </wiki/%D0%A4%D0%B0%D0%B9%D0%BB:AES-ShiftRows.svg>

Рис 3.16 Процедура ShiftRows

В процедурі ShiftRows, байти в кожному рядку state циклічно зсуваються ліворуч. Розмір зміщення байтів кожного рядка залежить від її номера.працює з рядками State. При цій трансформації рядка стану циклічно зсуваються на r байт по горизонталі, залежно від номера рядка. Для нульової рядка r = 0, для першого рядка r = 1б і тд .. Таким чином кожна колонка вихідного стану після застосування процедури ShiftRows складається з байтів з кожної колонки початкового стану. Для алгоритму Rijndael патерн зміщення рядків для 128 і 192-ох бітних рядків однаковий. Однак для блоку розміром 256 біт відрізняється від попередніх тим, що 2, 3, і 4-е рядка зміщуються на 1, 3, і 4 байта відповідно.().

 </wiki/%D0%A4%D0%B0%D0%B9%D0%BB:AES-MixColumns.svg>

Рис 3.17 Процедура MixColumns

В процедурі MixColumns, кожна колонка стану перемножується з фіксованим многочленом c (x).

У процедурі MixColumns, чотири байти кожної колонки State змішуються використовуючи для цього оборотну лінійну трансформацію. MixColumns обробляє стану по стовпчиках, трактуючи кожну з них як поліном четвертого ступеня. Над цими поліномами проводиться множення в GF (28) по модулю x4 + 1 на фіксований многочлен c (x) = 3x3 + x2 + x + 2. Разом з ShiftRows, MixColumns вносить дифузію у шифр.

AddRoundKey().

У процедурі AddRoundKey, кожен байт стану об'єднується з RoundKey використовуючи XOR operation (⊕).

У процедурі AddRoundKey, RoundKey кожного раунду об'єднується з State. Для кожного раунду Roundkey виходить з CipherKey використовуючи процедуру KeyExpansion, кожен RoundKey такого ж розміру, що і State. Процедура виробляє побітового XOR кожного байта State з кожним байтом RoundKey.

KeyExpansion().алгоритм, використовуючи процедуру KeyExpansion () і подаючи в неї Cipher Key, K, отримує ключі для всіх раундів. Всього вона отримує Nb * (Nr + 1) слів: спочатку для алгоритму потрібно набір з Nb слів, і кожному з Nr раундів потрібно Nb ключових набору даних. Отриманий масив ключів для раундів обзначается як w [i],

 (3.12)

Функція SubWord () бере четирехбайтовое вхідний слово і застосовує S-box до кожного з чотирьох байтів те, що вийшло подається на вихід. На вхід RotWord () подається слово [a0, a1, a2, a3] яке вона циклічно переставляє і повертає [a1, a2, a3, a0]. Масив слів, слів постійна для даного раунду, Rcon [i], містить значення [xi - 1,00,00,00], де x = (02), а xi - 1 є ступенем x в GF (2 ^ 8) ( i починається з 1).

Можна побачити, що перші Nk слів розширеної ключа заповнені Cipher Key. У кожне наступне слово, w [i], кладеться значення отримане при операціїw [i-1] і w [i - Nk], ті XOR'а попереднього і на Nk позицій раніше слів. Для слів, позиція яких кратна Nk, перед XOR'ом до w [i-1] застосовується трасформації, за якою слідує XOR з константою раунду Rcon [i]. Зазначена вище трансформація складається з циклічного зсуву байтів в слові (RotWord ()), за якою слідує процедура SubWord () - те ж саме, що й SubBytes (), тільки вхідні і вхідні дані будуть розміром в слово.

Важливо зауважити, що процедура KeyExpansion () для 256 бітного Cipher Key трохи відрізняється від тих, які застосовуються для 128 і 192 бітних шіфроключей. Якщо Nk = 8 і i - 4 кратно Nk, то SubWord () застосовується до w [i-1] до XOR'а.

3.5 Дослідження алгоритму RIPEMD-160

(від англ. RACE Integrity Primitives Evaluation Message Digest) - хеш-функція, розроблена в Лувенського католицькому університеті Гансом Добертіном (Hans Dobbertin), Антуном Босселаерсом (Antoon Bosselaers) і Бартом Пренелем (Bart Preneel). Для довільного вхідного повідомлення функція генерує 160-розрядне хеш-значення, зване дайджестом повідомлення. RIPEMD-160 є вдосконаленою версією RIPEMD, яка, у свою чергу, використовувала принципи MD4 і по продуктивності порівнянна з більш популярною SHA-1. Також існують 128 -, 256 - і 320-бітні версії цього алгоритму, які, відповідно, називаються RIPEMD-128, RIPEMD-256 і RIPEMD-320. 128-бітна версія являє собою лише від'єднуйте RIPEMD, яка також була 128-бітної і в якій були знайдені вразливості [1]. 256 - і 320-бітні версії відрізняються подвоєною довжиною дайджесту, що зменшує ймовірність колізій, але при цьому функції не повинні бути більш криптостійкому. RIPEMD-160 була розроблена у відкритому академічному співтоваристві, на відміну від SHA, які були створені NSA. З іншого боку, RIPEMD-160 на практиці використовується дещо рідше, ніж SHA-1. Можливо, це обумовлено найгіршою структуризацією RIPEMD-160.Іспользованіе RIPEMD-160 не обмежений будь-якими патентами.

3.5.1 Реалізація RIPEMD-160

Крок 1. Додавання відсутніх бітів.

Повідомлення розширюється так, щоб його довжина в бітах за модулем 512 дорівнювала 448. Таким чином, в результаті розширення, повідомленням бракує 64 біта до довжини, кратної 512 бітам. Розширення проводиться завжди, навіть якщо повідомлення споконвічно має потрібну довжину.

Розширення проводиться таким чином: один біт, що дорівнює 1, додається до повідомлення, а потім додаються біти, рівні 0, до тих пір, поки довжина повідомлення не стане рівною 448 по модулю 512. У результаті, до повідомлення додається як мінімум 1 біт, і як максимум 512.

Крок 2. Додавання довжини повідомлення.

-бітне подання b (довжини повідомлення перед додаванням набитих бітів) додається до результату попереднього кроку. У малоймовірному випадку, коли bбольше, ніж 264, використовуються тільки 64 молодших біта. Ці біти додаються у вигляді двох 32-бітових слів, і першим додається слово, що містить молодші розряди.

На цьому етапі (після додавання бітів і довжини повідомлення) ми отримуємо повідомлення довжиною кратною 512 бітам. Це еквівалентно тому, що це повідомлення має довжину, кратну 16-ти 32-бітним словами. Кожне 32-бітне слово містить чотири 8-бітових, але випливають вони не підряд, а навпаки (наприклад, з восьми 8-бітових слів (abcdefgh) ми отримуємо два 32-бітних слова (dcba hgfe)).

Крок 3. Визначення діючих функцій і констант. Нелінійні побітового функції:

 (3.13)

 (3.14)

 (3.15)

 (3.16)

 (3.17)

. Додаються шістнадцяткові константи:

(j) = 00000000x (0 ≤ j ≤ 15)(j) = 5A827999x (16 ≤ j ≤ 31)(j) = 6ED9EBA1x (32 ≤ j ≤ 47)(j) = 8F1BBCDCx (48 ≤ j ≤ 63)(j) = A953FD4Ex (64 ≤ j ≤ 79)'(j) = 50A28BE6x (0 ≤ j ≤ 15)'(j) = 5C4DD124x (16 ≤ j ≤ 31)'(j) = 6D703EF3x (32 ≤ j ≤ 47)'(j) = 7A6D76E9x (48 ≤ j ≤ 63)'(j) = 00000000x (64 ≤ j ≤ 79)

. Вибір 32-бітних слів з повідомлення

(j) = j при (0 ≤ j ≤ 15) (3.18)(16..31) = 7; 4; 13; 1; 10; 6; 15; 3; 12; 0; 9; 5; 2; 14; 11; 8(32..47) = 3; 10; 14; 4; 9; 15; 8; 1; 2; 7; 0; 6; 13; 11; 5; 12(48..63) = 1; 9; 11; 10; 0; 8; 12; 4; 13; 3; 7; 15; 14; 5; 6; 2(64..79) = 4; 0; 5; 9; 7; 12; 2; 10; 14; 1; 3; 8; 11; 6; 15; 13'(0..15) = 5; 14; 7; 0; 9; 2; 11; 4; 13; 6; 15; 8; 1; 10; 3; 12'(16..31) = 6; 11; 3; 7; 0; 13; 5; 10; 14; 15; 8; 12; 4; 9; 1; 2'(32..47) = 15; 5; 1; 3; 7; 14; 6; 9; 11; 8; 12; 2; 10; 0; 4; 13'(48..63) = 8; 6; 4; 1; 3; 11; 15; 0; 5; 12; 2; 13; 9; 7; 10; 14'(64..79) = 12; 15; 10; 4; 1; 5; 8; 7; 6; 2; 13; 14; 0; 3; 9; 11

. Набір для бітового повороту ліворуч (операція rol)

(0..15) = 11; 14; 15; 12; 5; 8; 7; 9; 11; 13; 14; 15; 6; 7; 9; 8(16..31) = 7; 6; 8; 13; 11; 9; 7; 15; 7; 12; 15; 9; 11; 7; 13; 12(32..47) = 11; 13; 6; 7; 14; 9; 13; 15; 14; 8; 13; 6; 5; 12; 7; 5(48..63) = 11; 12; 14; 15; 14; 15; 9; 8; 9; 14; 5; 6; 8; 6; 5; 12(64..79) = 9; 15; 5; 11; 6; 8; 13; 12; 5; 12; 13; 14; 11; 8; 5; 6'(0..15) = 8; 9; 9; 11; 13; 15; 15; 5; 7; 7; 8; 11; 14; 14; 12; 6'(16..31) = 9; 13; 15; 7; 12; 8; 9; 11; 7; 7; 12; 7; 6; 15; 13; 11'(32..47) = 9; 7; 15; 11; 8; 6; 6; 14; 12; 13; 5; 14; 13; 13; 7; 5'(48..63) = 15; 5; 8; 11; 14; 14; 6; 14; 6; 9; 12; 9; 12; 5; 15; 8'(64..79) = 8; 5; 12; 9; 12; 5; 14; 6; 8; 13; 6; 5; 15; 13; 11; 11

. Вихідні значення слів дайджесту

= 67452301x;= EFCDAB89x;= 98BADCFEx;= 10325476x;= C3D2E1F0x;

Крок 4. Виконання алгоритму хешування

Після завдання всіх вихідних функцій, констант і початкових значень слів хеш-суми можна переходити до виконання алгоритму. Виконання алгоритму відбувається у двох паралельних шляхах. Обробка повідомлення відбувається блоками по 16 слів в 32 біта.

3.5.2 RIPEMD-160 на псевдокоді

Під складанням «+» мається на увазі складання по модулю 232, rols позначає циклічний зсув вліво на s позицій.

i:=0 to t-1 {:= h0; B := h1; C := h2; D = h3; E = h4;' := h0; B' := h1; C' := h2; D' = h3; E' = h4;j := 0 to 79 {:= rols(j) (A + f(j;B;C;D) + Xi[r(j)] + K(j)) + E;:= E; E := D; D := rol10(C); C := B; B := T;:= rols'(j) (A' + f(79 - j;B';C';D') + Xi[r'(j)] + K'(j)) E';' := E'; E' := D'; D' := rol10(C'); C' := B'; B' := T;}:= h1 + C + D'; h1 := h2 + D + E'; h2 := h3 + E + A';:= h4 + A + B'; h4 := h0 + B + C'; h0 := T;}

3.5.3 Приклади хешів RIPEMD-160

Вхідна рядок складається з ASCII-символів. Вихідна рядок являє собою шістнадцятковий запис.("The quick brown fox jumps over the lazy dog") =

f332f68db77bd9d7edd4969571ad671cf9dd3b

Навіть маленьке зміна повідомлення викликає значну зміну дайджесту. Наприклад, ми замінимо в наведеному вище прикладі d на c:("The quick brown fox jumps over the lazy cog") =

df690933835eb8b6ad0b77e7b6f14acad7

Хеш-сума нульової рядка виглядає так:("") =

c1185a5c5e9fc54612808977ee8f548b2258d31

3.5.4 Продуктивність

У таблиці 3.14 для порівняння наведені швидкості виконання MD4-подібних функцій. Передбачається, що код виконання і даних знаходяться в кеші виконуючого пристрою.

Таблиця 3.14

Алгоритм

Циклів

Мбіт/сек

Відносна продуктивність

MD4

241

191.2

1.00

MD5

337

136.7

0.72

RIPEMD

480

96.0

0.50

RIPEMD-128

592

77.8

0.41

SHA-1

837

55.1

0.29

RIPEMD-160

1013

45.5

0.2


3.6 Дослідження алгоритму SHA-2

(англ. Secure Hash Algorithm Version 2 - безпечний алгоритм хешування, версія 2) - збірна назва односпрямованим хеш-функцій SHA-224, SHA-256, SHA-384 і SHA-512. Хеш-функції призначені для створення «відбитків» або «дайджестів» повідомлень довільної бітової довжини. Застосовуються в різних додатках або компонентах, пов'язаних із захистом інформації.

 

3.6.1 Історія SHA-2

Хеш-функції SHA-2 розроблені Агентством національної безпеки США і опубліковані Національним інститутом стандартів і технологій у федеральному стандарті обробки інформації FIPS PUB 180-2 в серпні 2002 року. В цей стандарт також увійшла хеш-функція SHA-1, розроблена в 1995 році. У лютому 2004 року в FIPS PUB 180-2 була додана SHA-224. У жовтні 2008 року вийшла нова редакція стандарту - FIPS PUB 180-3.

У липні 2006 року з'явився стандарт RFC 4634 «Безпечні хеш-алгоритми США (SHA і HMAC-SHA)», що описує SHA-1 і сімейство SHA-2.

Агентство національної безпеки від імені держави випустило патент на SHA-2 під ліцензією Royalty Free.

3.6.2 Алгоритм SHA-2


 </wiki/%D0%A4%D0%B0%D0%B9%D0%BB:SHA-2.svg>

Рис 3.18 Схема однієї ітерації алгоритмів SHA-2

Хеш-функції сімейства SHA-2 побудовані на основі структури Меркле - Дамгарда (англ.).

Вихідне повідомлення після додатки розбивається на блоки, кожен блок - на 8 слів. Алгоритм пропускає кожен блок повідомлення через цикл з 64-мя або 80-у ітерації (раундами). На кожній ітерації 2 слова з восьми перетворюються, функцію перетворення задають інші слова. Результати обробки кожного блоку складаються, сума є значенням хеш-функції. Алгоритм використовує наступні бітові операції:

ǁ - конкатенація,

+ - Додавання,- бітових,- бітових АБО »,- Виключне «АБО»,- Логічний зсув вправо,- Циклічний зсув вправо.

У наступній таблиці 3.15 показані деякі технічні характеристики різних варіантів SHA-2. «Внутрішній стан» означає проміжну хеш-суму після обробки чергового блоку даних:

Таблиця 3.15

Хеш-функція

Довжина дайджесту повідомлення (біт)

Довжина внутрішнього стану (біт)

Довжина блоку (біт)

Максимальна довжина повідомлення (біт)

Довжина слова (біт)

Кількість інтераций в циклі

SHA-256/224

256/224

256

512

264 − 1

32

64

SHA-512/384

512/384

512

1024

2128 − 1

64

80


3.6.3 Приклади SHA-2.

Нижче наведені приклади хешів SHA-2. Для всіх повідомлень мається на увазі використання кодування ASCII.("The quick brown fox jumps over the lazy dog")

= 730E109B D7A8A32B 1CB9D9A0 9AA2325D 2430587D DBC0C38B AD911525("The quick brown fox jumps over the lazy dog")

= D7A8FBB3 07D78094 69CA9ABC B0082E4F 8D5651E4 6D3CDB76 2D02D0BF 37C9E592("The quick brown fox jumps over the lazy dog")

= CA737F10 14A48F4C 0B6DD43C B177B0AF D9E51693 67544C49 4011E331 7DBF9A50

CB1E5DC 1E85A941 BBEE3D7F 2AFBC9B1("The quick brown fox jumps over the lazy dog")

= 07E547D9 586F6A73 F73FBAC0 435ED769 51218FB7 D0C8D788 A309D785 436BBB64

E93A252 A954F239 12547D1E 8A3B5ED6 E1BFD709 7821233F A0538F3D B854FEE6

Найменша зміна повідомлення в переважній більшості випадків призводить до зовсім іншому хешу внаслідок лавинного ефекту. Приміром, при зміні dog на cog вийде:("The quick brown fox jumps over the lazy cog")

= E4C4D8F3 BF76B692 DE791A17 3E053211 50F7A345 B46484FE 427F6ACC 7ECC81BE

3.6.4 Криптоаналіз SHA-2

На 2008 рік хеш-функції SHA-2, на відміну від SHA-1, недостатньо вивчені. У 2003 році Гілберт і Хандшух провели дослідження SHA-2, але не знайшли будь-яких вразливостей.

Криптоаналіз хеш-функції має на увазі дослідження стійкості алгоритму по відношенню, щонайменше, до наступних видів атак:

·   знаходження колізій, тобто різних повідомлень з однаковим хешем.

·        знаходження прообразу, тобто невідомого повідомлення по його хешу.

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

У березні 2008 року індійські дослідники Сомітра Кумар Санада і Палаш Саркар опублікували знайдені ними колізії для 22 ітерацій SHA-256 і SHA-512. У вересні того ж року вони представили метод конструювання колізій для зрізаних варіантів SHA-2 (21 ітерація).

Зважаючи на алгоритмічної схожості SHA-2 з SHA-1 і наявності в останньої потенційних вразливостей ведуться пошуки поліпшених альтернатив. Новий стандарт буде названий SHA-3, він буде визначений конкурсом, проведеним Національним інститутом стандартів і технологій в 2008-2012 рр..

3.6.5 Застосування та сертифікація

SHA-224, SHA-256, SHA-384 і SHA-512 закону США допускаються до використання в деяких урядових програмах, включаючи використання в рамках інших криптографічних алгоритмів та протоколів, для захисту інформації, яка не має грифа секретності. Стандарт також допускає використання SHA-2 приватними і комерційними організаціями.

Хеш-функції SHA-2 використовуються для перевірки цілісності даних і в різних криптографічних схемах. На 2008 рік сімейство хеш-функцій SHA-2 не має такого широкого розповсюдження, як MD5 і SHA-1, незважаючи на виявлені в останніх недоліки.

Деякі приклади застосування SHA-2 зазначено в таблиці 3.16:

Таблиця 3.16

Область використання

Деталі

S/MIME </wiki/S/MIME>SHA-224, SHA-256, SHA-384 или SHA-512 дайджести повідомлень


OpenLDAP </wiki/OpenLDAP>SHA-256, SHA-384 или SHA-512 хеши паролів


DNSSEC </wiki/DNSSEC>SHA-256 дайджести DNSKEY в протоколі DNSSEC


X.509 </wiki/X.509>SHA-224, SHA-256, SHA-384 и SHA-512 використовуються для створення електронного цифрового підпису сертифікату


PGP </wiki/PGP>SHA-256, SHA-384, SHA-512 використовуються для створення електронного цифрового підпису


IPSec </wiki/IPSec>Деякі реалізації підтримують SHA-256 в протоколах ESP </w/index.php?title=Encapsulating_Security_Payload&action=edit&redlink=1> и IKE </wiki/IKE>


DSA </wiki/DSA>Сімейство SHA-2 використовується для створення електронного цифрового підпису


SHACAL-2 </wiki/SHACAL-2>Блочний алгоритм шифрування SHACAL-2 побудований на основі хеш-функції SHA-256


Передача файлів

Для надійності передачі файлів по мережі іноді вказуються їх SHA-2 дайджести


Як показали дослідження, алгоритми SHA-2 працюють в 2-3 рази повільніше інших популярних хеш-алгоритмів MD5, SHA-1, Tiger і RIPEMD-160.

4. ОПИС ФУНКЦІОНАЛЬНИХ МОЖЛИВОСТЕЙ ТА ПРОГРАМНОЇ РЕАЛІЗАЦІЇ ПРОЕКТОВАНОЇ СИСТЕМИ

 

4.1 Функціональне призначення та технологічні особливості розробки


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

·        IBM-сумісний комп'ютер, не нижче Pentium IІ, RAM-128Mb, SVGA-800*600*16bit;

·        Вільний простір на жорсткому диску не менш 4 Мб.

Система повинна функціонувати під керуванням операційної системи Windows ХР, 7.

Розроблена система була протестована на 3 файлах малого, середнього та великого розміру.

4.2 Логіко-функціональна схема роботи системи


В загальному вигляді логіко-функціональну роботи системи можна представити наступним чином (рис. 4.1).

На рис. 4.1 представлена схема технологічного процесу виробництва.

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

Після кодування файлу систему можливо закрити.

Декодування файлу можливо проводити, як до аналізу властивостей алгоритмів кодування даних, так і після аналізу властивостей алгоритмів кодування даних.

Вибір алгоритму кодування даних проводить людина оперуючись властивостями алгоритмів, які видала система.

Рис. 4.1 Логіко-функціональна схема роботи системи

На рис. 4.2 представлена логіко-функціональна схема кодування файлу.

Рис. 4.2 Логіко-функціональна схема кодування файлу

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

На рис. 4.3 представлена логіко-функціональна схема декодування файлу.

Рис. 4.3 Логіко-функціональна схема декодування файлу

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

4.3 Програмна реалізація основних процедур системи


На рис. 4.4 наведено загальний вид головної форми системи на етапі проектування. Для проектування інтерфейсу користувача системи використовувалися наступні компоненти: menuStrip (для відображення для відображення пунктів меню), progressBar(для відображення стану процесу кодування), OpenFileDialog (для реалізації діалогового вікна відкриття файлу), Командні компоненти Label (для відображення інформації на формі).

Рис. 4.4 Загальний вид головної форми системи на етапі проектування

Наведемо опис основних фрагментів програмного коду, що реалізує функції системи.

При виборі пункту меню «Закодувати» відобразиться діалогове вікно для вибору файлу. Потім після натисканні кнопки «ОК», система по черзі буде кодувати обраний файл 6 алгоритмами. Після завершення кодування, кожним алгоритмом, відобразиться властивості алгоритмів на які треба звертати увагу при виборі алгоритму. Для реалізації цієї можливості ми написали код.

//якщо натиснута кнопка «ОК» у діалоговому вікні, то виконується кодування(openFileDialog1.ShowDialog()==DialogResult.OK)

{

//значеня для progressBar1 встановлюється в 1..Value = 1;

//створюемо новий екземпляр класу tdestdesf = new tdes();

//значеня для progressBar1 встановлюється в 2..Value = 2;

//збереження теперішнього часу= DateTime.Now;

//кодування файлу.Encrypt(openFileDialog1.FileName, openFileDialog1.FileName + "tdes");.Text = (DateTime.Now - tim).ToString();

//значеня для progressBar1 встановлюється в 3.Value = 3;.Text = tdes.keysize.ToString();

//значеня для progressBar1 встановлюється в 4.Value = 4;.Text = tdes.output.ToString();.Value = 5;.Dispose();

//значеня для progressBar2 встановлюється в 1..Value = 1;desf = new des();

//значеня для progressBar2 встановлюється в 2..Value = 2;= DateTime.Now;

//кодування файлу.Encrypt(openFileDialog1.FileName, openFileDialog1.FileName + "des");.Text = (DateTime.Now - tim).ToString();

//значеня для progressBar2 встановлюється в 3.Value = 3;.Text = des.keysize.ToString();

//значеня для progressBar2 встановлюється в 4.Value = 4;.Text = des.output.ToString();.Value = 5;.Dispose();

//значеня для progressBar3 встановлюється в 1..Value = 1;rc2f = new rc2();

//значеня для progressBar3 встановлюється в 2..Value = 2;= DateTime.Now;

//кодування файлуf.Encrypt(openFileDialog1.FileName, openFileDialog1.FileName + "rc2");.Text = (DateTime.Now - tim).ToString();

//значеня для progressBar3 встановлюється в 3.Value = 3;.Text = rc2.keysize.ToString();.Value = 4;.Text = rc2.output.ToString();.Value = 5;f.Dispose();

//значеня для progressBar4 встановлюється в 1..Value = 1;rijf = new Rijnder();

//значеня для progressBar4 встановлюється в 2..Value = 2;= DateTime.Now;

//кодування файлу.Encrypt(openFileDialog1.FileName, openFileDialog1.FileName + "rij");.Text = (DateTime.Now - tim).ToString();

//значеня для progressBar4 встановлюється в 3.Value = 3;.Text = Rijnder.keysize.ToString();.Value = 4;.Text = Rijnder.output.ToString();.Value = 5;.Dispose();

//значеня для progressBar5 встановлюється в 1..Value = 1;ripf = new RIPEMD160();

//значеня для progressBar5 встановлюється в 2..Value = 2;= DateTime.Now;.Hash(openFileDialog1.FileName, openFileDialog1.FileName + "rip");.Text = (DateTime.Now - tim).ToString();

//значеня для progressBar5 встановлюється в 3.Value = 3;.Text = RIPEMD160.keysize.ToString();.Value = 4;.Text = RIPEMD160.output.ToString();.Value = 5;.Dispose();

//значеня для progressBar6 встановлюється в 1..Value = 1;shaf = new SHA512();

//значеня для progressBar6 встановлюється в 2..Value = 2;= DateTime.Now;.Hash(openFileDialog1.FileName, openFileDialog1.FileName + "sha");.Text = (DateTime.Now - tim).ToString();

//значеня для progressBar6 встановлюється в 3..Value = 3;.Text = SHA512.keysize.ToString();.Value = 4;.Text = SHA512.output.ToString();.Value = 5;.Dispose();

}

Для кодування та декодування файлу алгоритмом TripleDES в системі був створений клас tdes.

Основні функції якого приведенні нижче.

Функція для тестового кодування.

public void Encrypt(String inName, String outName)

{

//сворення файлового потоку для відкриття файлуfin = new FileStream(inName, FileMode.Open, FileAccess.Read);

//сворення файлового потоку для запису файлуfout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);.SetLength(0);[] bin = new byte[100];rdlen = 0;totlen = fin.Length;len;tdes = new TripleDESCryptoServiceProvider();encStream = new CryptoStream(fout, tdes.CreateEncryptor(), CryptoStreamMode.Write);= tdes.KeySize;(rdlen < totlen)

{= fin.Read(bin, 0, 100);

//кодування потоку.Write(bin, 0, len);= rdlen + len;

}= fout.Length + tdes.Key.Length + tdes.IV.Length;.Close();

}

Функція для декодування.

private static void DecryptData(String inName, String outName, String tdesKey, String tdesIV)

{[] key, IV;

//Створення файлових потоків для вхідного та вихідного файлів.fin = new FileStream(inName, FileMode.Open, FileAccess.Read);fkey = new FileStream(tdesKey, FileMode.Open, FileAccess.Read);fIV = new FileStream(tdesIV, FileMode.Open, FileAccess.Read);fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);.SetLength(0);= new byte[fkey.Length];= new byte[fIV.Length];.Read(key,0,(int)fkey.Length);.Read(IV, 0, (int)fIV.Length);

//Створення переміних для кодування.[] bin = new byte[100];rdlen = 0; //Загальна кількість байт прочитано.totlen = fin.Length; //Довжина файлу.len;tdes = new TripleDESCryptoServiceProvider();encStream = new CryptoStream(fout, tdes.CreateDecryptor(key, IV), CryptoStreamMode.Write);= tdes.KeySize;(rdlen < totlen)

{= fin.Read(bin, 0, 100);.Write(bin, 0, len);= rdlen + len;

}.Close();

}

Для кодування та декодування файлу алгоритмом DES в системі був створений клас des.

Основні функції якого приведенні нижче.

Функція для тестового кодування.

public void Encrypt(String inName, String outName)

{fin = new FileStream(inName, FileMode.Open, FileAccess.Read);fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);.SetLength(0);[] bin = new byte[100];rdlen = 0;totlen = fin.Length;len;des = new DESCryptoServiceProvider();encStream = new CryptoStream(fout, des.CreateEncryptor(), CryptoStreamMode.Write);= des.KeySize;(rdlen < totlen)

{= fin.Read(bin, 0, 100);.Write(bin, 0, len);= rdlen + len;

}= fout.Length + des.Key.Length + des.IV.Length;.Close();

}

Функція для декодування.

private static void DecryptData(String inName, String outName, String desKey, String desIV)

{[] key, IV;

//Create the file streams to handle the input and output files.fin = new FileStream(inName, FileMode.Open, FileAccess.Read);fkey = new FileStream(desKey, FileMode.Open, FileAccess.Read);fIV = new FileStream(desIV, FileMode.Open, FileAccess.Read);fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);.SetLength(0);= new byte[fkey.Length];= new byte[fIV.Length];.Read(key,0,(int)fkey.Length);.Read(IV, 0, (int)fIV.Length);[] bin = new byte[100];rdlen = 0;totlen = fin.Length;len;des = new DESCryptoServiceProvider();encStream = new CryptoStream(fout, des.CreateDecryptor(key, IV), CryptoStreamMode.Write);= des.KeySize;(rdlen < totlen)

{= fin.Read(bin, 0, 100);.Write(bin, 0, len);= rdlen + len;

}.Close();

}

Для кодування та декодування файлу алгоритмом RC2 в системі був створений клас rc2.

Основні функції якого приведенні нижче.

Функція для тестового кодування.

public void Encrypt(String inName, String outName)

{fin = new FileStream(inName, FileMode.Open, FileAccess.Read);fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);.SetLength(0);

[] bin = new byte[100];rdlen = 0;totlen = fin.Length;len;CryptoServiceProvider rc2 = new RC2CryptoServiceProvider();encStream = new CryptoStream(fout, rc2.CreateEncryptor(), CryptoStreamMode.Write);= rc2.KeySize;(rdlen < totlen)

{= fin.Read(bin, 0, 100);.Write(bin, 0, len);= rdlen + len;

}= fout.Length + rc2.Key.Length + rc2.IV.Length;.Close();

}

Функція для декодування.

private static void DecryptData(String inName, String outName, String desKey, String desIV)

{[] key, IV;fin = new FileStream(inName, FileMode.Open, FileAccess.Read);fkey = new FileStream(desKey, FileMode.Open, FileAccess.Read);fIV = new FileStream(desIV, FileMode.Open, FileAccess.Read);fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);.SetLength(0);= new byte[fkey.Length];= new byte[fIV.Length];.Read(key, 0, (int)fkey.Length);.Read(IV, 0, (int)fIV.Length);[] bin = new byte[100];rdlen = 0;totlen = fin.Length;len;CryptoServiceProvider rc2 = new RC2CryptoServiceProvider();encStream = new CryptoStream(fout, rc2.CreateDecryptor(key, IV), CryptoStreamMode.Write);= rc2.KeySize;(rdlen < totlen)

{= fin.Read(bin, 0, 100);.Write(bin, 0, len);= rdlen + len;

}.Close();

}

Для кодування та декодування файлу алгоритмом Rijndeal в системі був створений клас rijndeal.

Основні функції якого приведенні нижче.

Функція для тестового кодування.

public void Encrypt(String inName, String outName)

{fin = new FileStream(inName, FileMode.Open, FileAccess.Read);fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);.SetLength(0);[] bin = new byte[100];rdlen = 0;totlen = fin.Length;len;rij = new RijndaelManaged();encStream = new CryptoStream(fout, rij.CreateEncryptor(), CryptoStreamMode.Write);= rij.KeySize;(rdlen < totlen)

{= fin.Read(bin, 0, 100);.Write(bin, 0, len);= rdlen + len;

}= fout.Length + rij.Key.Length + rij.IV.Length;.Close();

}

Функція для декодування.

private static void DecryptData(String inName, String outName, String desKey, String desIV)

{[] key, IV;fin = new FileStream(inName, FileMode.Open, FileAccess.Read);fkey = new FileStream(desKey, FileMode.Open, FileAccess.Read);fIV = new FileStream(desIV, FileMode.Open, FileAccess.Read);fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);.SetLength(0);= new byte[fkey.Length];= new byte[fIV.Length];.Read(key, 0, (int)fkey.Length);.Read(IV, 0, (int)fIV.Length);[] bin = new byte[100];rdlen = 0totlen = fin.Length;len;reij = new RijndaelManaged();encStream = new CryptoStream(fout, reij.CreateDecryptor(key, IV), CryptoStreamMode.Write);= reij.KeySize;(rdlen < totlen)

{= fin.Read(bin, 0, 100);.Write(bin, 0, len);= rdlen + len;

}.Close();

}

Для хешування та перевірки хеш коду файлу алгоритмом sha512 в системі був створений клас sha512.

Основні функції якого приведенні нижче.

Функція для створення хеш коду.

public void Hash(string inName, string outName)

{fin = new FileStream(inName, FileMode.Open, FileAccess.Read);fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);.SetLength(0);[] hashValue;CryptoServiceProvider sha = new SHA512CryptoServiceProvider();= sha.ComputeHash(fin);= sha.HashSize;.Write(hashValue, 0, hashValue.Length);= fout.Length + fin.Length;.Close();.Close();

}

Функція перевірки хеш коду.string Chek(string inName, string outName)

{s = string.Empty;fin = new FileStream(inName, FileMode.Open, FileAccess.Read);fout = new FileStream(outName, FileMode.Open, FileAccess.Read);[] hashValue;[] hashValue1 = new byte[fout.Length];CryptoServiceProvider sha = new SHA512CryptoServiceProvider();= sha.ComputeHash(fin);.Read(hashValue1, 0, (int)fout.Length);.Close();.Close();(var i in hashValue.Except(hashValue1))

{= "Не идентичные";

}(s == string.Empty) { s = "Идентичные"; }s;

}

Для хешування та перевірки хеш коду файлу алгоритмом Ripemd160 в системі був створений клас Ripemd160.

Основні функції якого приведенні нижче.

Функція для створення хеш коду.void Hash(string inName,string outName)

{fin = new FileStream(inName, FileMode.Open, FileAccess.Read);fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);.SetLength(0);[] hashValue;Managed rip = new RIPEMD160Managed();= rip.ComputeHash(fin);= rip.HashSize;.Write(hashValue,0,hashValue.Length);= fout.Length + fin.Length;.Close();.Close();

}

Функція перевірки хеш коду.string Chek(string inName, string outName)

{s=string.Empty;fin = new FileStream(inName, FileMode.Open, FileAccess.Read);fout = new FileStream(outName, FileMode.Open, FileAccess.Read);[] hashValue;[] hashValue1 = new byte[fout.Length];Managed rip = new RIPEMD160Managed();= rip.ComputeHash(fin);.Read(hashValue1, 0, (int)fout.Length);.Close();.Close();(var i in hashValue.Except(hashValue1))

{= "Не идентичные";

}(s == string.Empty) { s = "Идентичные"; }s;

}

4.4 Опис інтерфейсу користувача


Загальний вигляд головного вікна системи в одному з робочих режимів наведений на рис. 4.5.

Рис. 4.5 Головне вікно системи в одному з робочих режимів

Після того, як ми натиснемо на підпункт «Закодувати», буде відкрите діалогове вікно обирання файлу для тесту алгоритмів.

Загальний вигляд вікна «TripleDES» системи в одному з робочих режимів наведений на рис. 4.6.

Рис. 4.6 Загальний вигляд вікна «TripleDES» системи в одному з робочих режимів

Загальний вигляд вікна «DSE» системи в одному з робочих режимів наведений на рис. 4.7.

Рис. 4.7 Загальний вигляд вікна «DSE» системи в одному з робочих режимів

Загальний вигляд вікна «RC2» системи в одному з робочих режимів наведений на рис. 4.8.

Рис. 4.8 Загальний вигляд вікна «RC2» системи в одному з робочих режимів

Поки не буде вибрані ключ та вектор користувач не зможе натиснути на кнопки «Закодувати файл» та «Розкодувати файл».

Загальний вигляд вікна «Rijndeal» системи в одному з робочих режимів наведений на рис. 4.9.

Рис. 4.9 Загальний вигляд вікна «Rijndeal» системи в одному з робочих режимів

Загальний вигляд вікна «SHA512» системи в одному з робочих режимів наведений на рис. 4.10.

Рис. 4.10 Загальний вигляд вікна «SHA512» системи в одному з робочих режимів


Рис. 4.11 Загальний вигляд вікна «RIPEMD160» системи в одному з робочих режимів

5. ЕКОНОМІЧНЕ ОБҐРУНТУВАННЯ ДОЦІЛЬНОСТІ РОЗРОБКИ ПРОГРАМНОГО ПРОДУКТУ

 

5.1 Організаційно-економічна частина


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

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

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

5.2 Розрахунок економічного ефекту по впровадженню програмного продукту.

Економічна доцільність розробки полягає в економії трудовитрат в порівнянні з ручною обробкою і отриманні достовірнішої інформації за коротший час.

Таблиця. 5.1

Витрати на витратні матеріали

№ п/п

Найменування матеріалу

Витрата шт.

Ціна грн./шт.

Сума грн.

1

Допоміжна література

1

48

48

Разом 48

сумісний комп'ютер Pentium IІІ, RAM-256Mb, SVGA-800*600*16bit;

Амортизація розраховується лінійним способом, в розрахунку від строку експлуатації, наприклад 3 роки.

:3=667грн. у рік.

Таблиця. 5.2

Основна заробітна платня програміста ПП

№ п/п

Виконавці

Трудомісткість, чел.дн.

Оклад, грн.

Витрати по з/п, грн.

1

Програміст

5

1000

238,09


Додаткова заробітна платня програміста складає 20 % від основної заробітної платні:

,09*0,20=47,61грн

Фонд заробітної платні є сумою основної і додаткової заробітної платні:

,09+47,61=285,70 грн

Нарахування на ФОП:

1.           Безробіття 1,6%

2.       Пенсійний фонд 33,2%

.        Соцзабезпечення тимчасової непрацездатності 1,4%

.        Соцзабезпечення від нещасних випадків 1%

Підсумок: 37,2%

Відрахування на соціальні нужди складають 37,2 % від фонду оплати праці:

,70*0,372=106,28 грн

Накладні витрати складають 250 % від величини основної заробітної платні:

,09*2,5=595,22 грн

Таблиця. 5.3

Калькуляція

№ п/п

Найменування статей витрат

Витрати, грн.

1

Витратні матеріали

45

3

Основна заробітна платня програміста

238,09

4

Додаткова заробітна платня програміста

47,61

5

Відрахування на соціальне страхування

106,28

6

Накладні витрати

395,22

Разом витрат Зк= 832,2


Витрати на ручну обробку інформації визначаються по формулі:

,

де - об'єм інформації, оброблюваної уручну, Мбайт;

- вартість однієї години роботи, грн./год.;

- коефіцієнт, що враховує додаткові витрати часу на логічні операції при ручній обробці інформації;

- норма вироблення, Мбайт/ година.

В даному випадку:

Оі = 10 Мбайт (загальний розмір оброблювальних даних),

Заробітна платня 900грн.

Ц=900/22/8=5,11 грн./ година,

Гд = 2.5 (встановлений експериментально),

Нв = 0.004 Мбайт / година.

Отже, витрати на ручну обробку інформації будуть рівні:

Зр=10*5,11*2,5/0,004=31937,50 грн.

Витрати на автоматизовану обробку інформації розраховуються по наступній формулі:

,

де - час автоматичної обробки, годин;

- вартість однієї години машинного часу, грн./година;

- час роботи оператора, годин;

- вартість однієї години роботи оператора, грн./година.

Для нашого випадку:= 1922 годин,

Номінальний фонд робочого часу розраховується по формулі :

                        k1n = к ( 1 - -------------- )

                      100%

к - кількість відпрацьованих годин за рік;

к1 - внутрішні втрати робочого часу, 1- 2% (пільгові години, перерви і т. п ).

К = д * р * м

д - середня кількість робочих днів в місяці = 22;

р - тривалість робочого дня = 8;

м - кількість робочих місяців в році = 12;

К = 22 * 8 * 12 = 2112

                          8 + 1= 2112 ( 1 - ------------ ) = 1922год.

                     100%

Час роботи оператора = 1922 годин в рік

Вартість однієї години машинного часу дорівнює:

Цм = Цэ*Р

Це - вартість 1кВт електроенергії ;

Р - споживана потужність комп’ютера за годину 160Вт

Вартість 1 кВт електроенергії для підприємства 24,35 копійок або 0,2435грн.

Цм=160*0,24=38.4грн/год.= 1922 ч.,

Ц0 =900/ 22/ 8=5,11 грн. (заробітна платня 900грн)

Отже, витрати на автоматизовану обробку інформації будуть рівні:

За=1922*0,02+1922*(5,11+0,02)=9879,08 грн.

Таким чином, річна економія від упровадження рівна:

Еу = 24812,50 - 9879,08 - 2444,29= 12489,13грн.

Економічний ефект від використовування програмного забезпечення за рік визначається по формулі, грн.:

.

Ег=12489,13 - 4500*0,2=11589,13грн.

Ефективність розробки може бути оцінена за формулі:

.

Ер=11589,13 *0,4/2444,29=1,896

Оскільки Ер > 0.20, наша розробка є економічно доцільною.

Вартісна оцінка результатів застосування програмного забезпечення за розрахунковий період Т визначається по формулі:

,

де Т - розрахунковий період;

Рt - вартісна оцінка результатів t розрахункового періоду, грн.;

- дисконтуюча функція, яка вводиться з метою приведення всіх витрат і результатів до одного моменту часу.

Дисконтуюча функція має вигляд:

= 1 / (1 + р) t,

де р - коефіцієнт дисконтування (р = Ен = 0.2, Ен - нормативний коефіцієнт ефективності капітальних вкладень).

Таким чином,

.

Якщо програмне забезпечення замінює ручну працю, отже, набір корисних результатів у принципі не змінюється. Як оцінка результатів застосування програмного забезпечення в рік береться різниця (економія) витрат, що виникає в результаті використовування програмного забезпечення, тобто Рt = Еу.

Передбачається, що даний розробка без змін і доробок використовуватиметься в перебігу п'яти років. Тоді вартісна оцінка результатів застосування програмного забезпечення (економія) за розрахунковий період Т = 5 років складе:

=11589,13+9657,6+8048+6706,672+5588,89=41590,292 грн.

6. ОХОРОНА ПРАЦІ


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

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

Законодавство України про охорону праці базується на:

Конституція України, яка гарантує права громадян на працю, відпочинок, охорону здоров’я, медичну допомогу і страхування;

Закон України „Про охорону праці”, де вказано, що державна політика в області охорони праці базується на пріоритеті життя і здоров’я людей в умовах їх трудової діяльності. Відповідальність за створення нормальних і безпечних умов труда несе роботодавець незалежно від форми власності підприємства чи установи які здійснюють розробку виробництва та застосування ПЕОМ і ПК;

Норми штучного та природного освітлення визначені СНіП;

Закон України „Про забезпечення санітарного та епідемічного благополуччя населення” де вказані основні вимоги гігієни та санітарії;

Параметри мікроклімату на робочих місцях регламентовані Держстандартом і ДСН;

Категорія робіт по величині загальних енергозатрат встановлена ДСН;

Закон України „Про загальнообов’язкове державне соціальне страхування від нещасного випадку на виробництві та професійного захворювання, які спричинили втрату працездатності”, який гарантує право трудящих на соціальний захист і компенсацію постраждалим матеріальних втрат при травмуванні і професійного захворювання;

Кодекс законів про працю (КЗпП) де викладені окремі вимоги охорони праці;

Пожежна безпека викладена в законі України „Про пожежну безпеку” і „Правила про пожежну безпеку в Україні”

Крім того є ряд Державних стандартів, правил, норм, інструкцій та інших нормативних документів, регламентуючих питання охорони праці.

6.1 Аналіз небезпечних і шкідливих факторів в обчислювальному центрі

програмний кодування алгоритм хеш

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

Нанесення травми людині в умовах виробництва обумовлене наявністю небезпечних виробничих чинників:

несприятливі мікрокліматичні умови;

підвищений рівень шуму;

недостатнє або надмірне освітлення;

підвищений рівень рентгенівських випромінювань;

рівня електромагнітних випромінювань;

психофізіологічні шкідливі і небезпечні виробничі чинники.

Держстандарт 12.1.005-88 розповсюджується на повітря робочої зони підприємств, встановлює загальні санітарно-гігієнічні вимоги до показників мікроклімату й допустимому вмісту шкідливих речовин в повітрі робочої зони. Вимоги на допустимий вміст шкідливих речовин в повітрі робочої зони розповсюджуються на робочі місця незалежно від їх розташування.

Показники, якими характеризується мікроклімат є: температура повітря, відносна вологість повітря, швидкість руху повітря, інтенсивність теплового випромінювання. Низька температура повітря впливає на оператора, як на організм людини так і на обладнання ПЕОМ. Великий вплив виявляє відносна вологість. При відносній вологості повітря більш 75-80% знижується опір ізоляції, змінюються робочі характеристики елементів, зростає інтенсивність відмов елементів ПЕОМ. Швидкість руху повітря і запиленість повітряного середовища виявляють вплив на функціональну діяльність людини і роботу приладів ПЕОМ.

В холодні періоди року температура повітря, швидкість його руху і відносна вологість повітря відповідно складають: 22-24 С°; 0,1 м/с; 40-60%; в теплі періоди року температура повітря - 23-25 С°; відносна вологість 40-60 %; швидкість руху повітря - 0,1 м/с.

Кондиціювання - це автоматична підтримка в закритих приміщеннях всіх або окремих параметрів повітря з метою забезпечення оптимальних мікрокліматичних умов.

Згідно СНіП 2.04. 05-91 система вентиляції, кондиціювання повітря й повітряного опалення передбачена для суспільних, адміністративно-побутових і виробничих категорій.

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

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

Психофізіологічні шкідливі і небезпечні виробничі чинники по характеру дії поділяються на фізичні і нервово-психічні перевантаження.

При експлуатації ПЕОМ можуть виникнути негативні явища в організмі людини. Розлади, що виникають в результаті постійного виконання дій, що повторюються, стосуються працівників, що використовують в своїй роботі клавіатуру. При цьому виникає синдром тунельного зап’ястя, який викликає розпухання сухожиль, і що супроводжується постійною біллю при виконанні будь-яких дій, навіть не зв’язаних безпосередньо з професійною діяльністю.

Відповідно діючим нормативним документам (СН 512-78 та ДСанПіН 3.3.007-98) дана площа приміщення розрахована на одну людину 13,0 м2; об’єм -35,1м3. Стіна, стеля, підлога приміщення виготовляються з матеріалів, дозволених для оформлення приміщень санітарно-епідеміологічним наглядом. Підлога приміщення вкрита діелектричним килимком, випробуваним на електричну міцність.

Висота робочої поверхні столу для персонального комп’ютера (ПК) - 690 мм, ширина повинна забезпечувати можливість виконання операцій в зоні досягнення моторного ходу; висота столу 725 мм, ширина 800 мм, глибина 900 мм. Простір для ніг: висота 600 мм, ширина 500 мм, глибина на рівні колін 500 мм, на рівні витягнутої ноги 650мм.

Ширина й глибина сидіння 400 мм, висота поверхні сидіння 450 мм, кут нахилу поверхні від 15° вперед до 5° назад. Поверхня сидіння плоска, передній край закруглений.

Заземлення конструкцій, які знаходяться в приміщенні надійно захищені діелектричними щитками. В приміщенні з ПЕОМ кожен день проводиться вологе прибирання.

В доступних місцях знаходяться аптечки першої медичної допомоги.

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

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

При роботі на ПЕОМ людина наражається на шумовий вплив з боку багатьох джерел, наприклад, шум викликаний роботою принтера (70 дБ).

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

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

Джерелами випромінювання електромагнітних полів (ЕМП) в ПЕОМ є система відхилення випромінювання монітору, а також елементи блоків живлення системного модуля, монітору, принтера.

Дія електромагнітних полів на організм людини виявляється у функціональному розладі центральної нервової системи. В результаті тривалого перебування в зоні дії електромагнітних полів наступають передчасна стомлюваність, сонливість або порушення сну, з'являються часті головні болі.

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

Електронно-променеві трубки, які працюють при напрузі понад 6 кВ є джерелами „м’якого” рентгенівського випромінювання. При напрузі понад 10 кВ рентгенівське випромінювання виходить за межі скляного балону і розсіюється в навколишньому просторі виробничого приміщення.

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

Значення освітлення в процесі життєдіяльності і особливо виробничої діяльності сучасного суспільства величезне. Організація раціонального освітлення робочих місць - одне з основних питань охорони праці. Залежно від джерела світла виробниче освітлення може бути трьох видів: природне, штучне і суміщене.

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


Штучне освітлення передбачається у всіх виробничих і побутових приміщеннях, де не досить природного світла, а також для освітлення приміщень в нічний час. По функціональному призначенню штучне освітлення підрозділяють на робоче, аварійне, евакуаційне, охоронне, чергове. Робоче освітлення забезпечує зорові умови нормальний роботи, проходу людей і руху транспорту. Аварійне освітлення влаштовують для продовження роботи при раптовому відключенні робочого освітлення. При цьому нормована освітленість повинна складати 5 % від робочого освітлення. Евакуаційне освітлення передбачається для евакуації людей з приміщень при аваріях в місцях, небезпечних для проходу людей, на сходових клітках (повинно бути в приміщеннях не менше 0,5, а на відкритих територіях - не менше 0,2 лк).

По розподілу світлового потоку в просторі розрізняють світильники прямого, розсіяного і відображеного світла, а по конструктивному виконанню - світильники відкриті, закриті, захищені, пилонепроникні, вологозахисні, вибухозахищені, вибухобезпечні. За призначенням світильники діляться на світильники загального і місцевого освітлення.

Штучне освітлення може бути загальним (рівномірним або локалізованим) і комбінованим (до загального додається місцеве). Застосування тільки місцевого освітлення забороняється.

В силу тісного взаємозв’язку зору людини з роботою мозку освітлення виявляє істотний вплив на центральну нервову систему, яка керує всією життєдіяльністю людини. Раціональне освітлення сприяє підвищенню продуктивності і безпеки праці і збереженню здоров’я працюючих. Недостатнє освітлення робочих місць - одна з причин низької продуктивності праці. В цьому випадку очі працюючого сильно напружені, важко розрізняють предмети, у людини знижується темп і якість роботи, погіршується загальний стан.

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

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

Як самостійна галузь знань промислова естетика і теоретично і організаційно сформувалась порівняно недавно. Вона вивчає закони художньої творчості в сфері виробництва. Коло питань, розроблювальних промисловою естетикою, дуже широкий. Це раціональне колірне оформлення промислових приміщень і встаткування, розумна організація робочого місця, художнє конструювання верстатів, машин, інструментів, впровадження функціональної музики, художня розробка моделей робочого одягу, устаткування стендів наочної агітації, озеленення території цехів і підприємств.

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

У виробничому інтер'єрі колір також відіграє попереджуючу роль, використовується для зображення технологічних символів і всіляких сигналів. Наприклад, при будівництві промислових об'єктів трубопроводи різного призначення (для води, кислоти, газу) пофарбовані в різний колір. Усім відомі сигнально-попереджуючі кольори: червоний - стоп, небезпечно; жовтий - можлива небезпека; зелений - повна безпека. З економічної точки зору раціональне фарбування робочих приміщень і встаткування підвищує продуктивність праці на 5-20%, зменшує число нещасних випадків.

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

Основні принципи ергономічної організації робочого місця - комфорт і мінімізація навантажень. Зрозуміло, принципам ергономіки повинна відповідати й використовувані меблі. Наприклад, зручне крісло, у якому можна без шкоди для здоров'я працювати тривалий час, повинне бути оснащений підлокітниками й підголівником, що знімають навантаження з м'язів плечового поясу. Пружна спинка анатомічної форми зменшує навантаження на хребет. У результаті конструкція рівномірно підтримує все тіло. Також крісло повинне регулюватися по висоті й глибині сидіння, залежно від ваги й росту людини.

Серед столів найбільш ергономічною визнана криволінійна кутова форма. За рахунок увігнутості більша частина їхньої площі виявляється використовуваної, оскільки попадає в зону охоплення руками людини, рівну 35-40 см.

Самим оптимальним фахівцями вважається розташування меблів за принципом «усе під рукою», коли всі необхідні для щоденної роботи полиці, тумби, шафи перебувають на відстані витягнутої руки. Це дозволяє виключити непотрібні витрати енергії й зосередиться на виконанні прямих обов'язків.

6.2 Заходи щодо нормалізації шкідливих і небезпечних факторів


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

Для зниження електромагнітного впливу на людину-оператора використовуються також раціональні режими роботи, при яких час роботи на ПЕОМ не повинна перевищувати 50 % робочого часу.

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

Системи опалення - це комплекс елементів, необхідних для опалення приміщень в холодний період року, нормованої температури повітря не нижче встановленої Держстандарт 12.1. 005-88 і СНіП 2.04. 05-91. У приміщеннях з електронно-обчислювальною технікою передбачають центральне опалення в сполученні із приточною вентиляцією або кондиціювання повітря при одне- і двозмінному режимах роботи, а при трьохзмінному - тільки повітряне опалення.

Гранично допустимі рівні напруги дотику і струмів при експлуатації і ремонті обладнання забезпечені:

застосуванням малої напруги;

ізоляцією струмоведучих мереж;

обґрунтуванням і оптимальним вибором елементної бази, що виключає передумови поразки електричним струмом;

правильного компонування, монтажу приладів і елементів;

дотриманням умов безпеки при настанові і заміні приладів і інше.

Захист від небезпечних впливів електричного струму при експлуатації обчислювальних комплексів забезпечені:

застосування захисного заземлення або обнуління;

ізоляцією струмопровідних частин;

дотриманням умов безпеки при настанові і заміні агрегатів;

надійним контактним сполученням з урахуванням перепаду кліматичних параметрів.

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

На робочих місцях всі металеві та електропровідні неметалеві обладнання заземлені.

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

Зниження виробничого шуму в приміщеннях, де розміщені ПЕОМ, досягається за рахунок акустичної обробки приміщення - зменшення енергії відбитих хвиль, збільшення еквівалентної площі звукопоглинаючих поверхонь, наявність в приміщеннях штучних звукопоглиначів.

З метою зниження шуму в самих джерелах встановлюються віброгасячі і шумогасячі прокладки або амортизатори. В якості засобів звукопоглинання застосовуються не горючі або тяжко горючі спеціальні перфоровані плити, панелі, мінеральна вата з максимальним коефіцієнтом поглинання в межах частот 31.5-8000 Гц.

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

Електронно-променеві трубки, магнетрони, тиратрони та інші електровакуумні прилади, що працюють при напрузі вище 6 кВ, є джерелами „м’якого” рентгенівського випромінювання. При технічній експлуатації апаратури, в якій напруга вище 15 кВ, використовують засоби захисту для відвертання рентгенівського опромінення операторів і інженерно-технічних робітників, бо при такій напрузі рентгенівське випромінювання розсіюється в навколишньому просторі виробничого приміщення.

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

Засобами захисту від „м’якого” рентгенівського випромінювання є застосування поляризаційних екранів, а також використання в роботі моніторів, що мають біо-керамічне покриття і низький рівень радіації. В якості засобів захисту від чинності м’яких рентгенівських променів застосовуються екрани з сталевого листа (0,5-1 мм) або алюмінію (3 мм), спеціальної гуми.

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

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

достатнє, щоб очі без напруги могли розрізняти деталі;

постійна напруга в мережі не коливається більше ніж на 4%;

рівномірно розподілено по робочим поверхням, щоб очам не приходилося зазнавати різкого контрасту кольорів;

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

не викликає різких тіней на робочих місцях.

Задачею розрахунку є визначення необхідної потужності електричної освітлювальної установки для створення у виробничому приміщенні заданої освітленості. При проектуванні освітлювальної установки необхідно вирішити наступні основні питання:

вибрати тип джерела світла - рекомендуються газорозрядні лампи, за винятком місць, де температура повітря може бути менш +5°С і напруга в мережі падати нижче 90 % номінального, а також місцевого освітлення (у цих випадках застосовуються лампи розжарювання);

визначити систему освітлення (загальна локалізована або рівномірна, комбінована);

вибрати тип світильників з урахуванням характеристик світорозподілення, умов середовища (конструктивного виконання) та інше;

розподілити світильники і визначити їх кількість (світильники можуть матися в своєму розпорядженні рядами, в шаховому порядку, ромбоподібно);

визначити норму освітленості на робочому місці.

Для розрахунку штучного освітлення використовують в основному три методи. Найчастіше її розраховують по світловому потоку. Для цього визначається світловий потік кожної лампи по нормуючій мінімальній горизонтальній освітленості Еmin (лк) з вираження:

=(Emin·S·K·z) / n1·n·N,

де F - світловий потік лампи в світильнику, лм;- площа приміщення, м2;- коефіцієнт запасу;- коефіцієнт нерівномірного освітлення;- коефіцієнт використання світлового потоку;- кількість ламп в світильнику;- число світильників.

Якщо освітлення здійснюється рядами люмінесцентних ламп, те вираження вирішується відносно N. Значення коефіцієнта n1 визначається по довіднику в залежності від типу світильника, коефіцієнтів відбивання стін Рс, стелі Рп, робітничій поверхні і від розмірів приміщення. Показник приміщення fi визначається з виразу:

= А·В/Нр·(А+В),

де А і В - довжина і ширина освітленого приміщення, м;

Нр - висота підвісу світильника над робітничою поверхнею, м.

У випадку застосування люмінесцентних ламп потрібна кількість світильників N, яка визначається за формулою:

=Emin·S·K·z/F·n1·n

Поділивши число світильників N на число вибраних рядів світильників, визначають число світильників у кожному ряду.

Нехай зал має розміри А=8м, В=5м, h=3м, стеля обладнується світильниками Л201Б з люмінесцентними лампами ЛБ80.

Рівень робітничої поверхні над полом 0,8 м, при цьому Нр=2,2 м.

Показник приміщення рівний:=40/2,2 (8+5)=1,3986

По довіднику визначаємо значення коефіцієнта n1 (для значень Рс=0,5, Рп=0,3): n1=0,7. Значення коефіцієнта нерівномірного освітлення приймаємо рівним 1,1, а коефіцієнта запасу - 1,5. При загальному типі освітлення значення Emin=400 лк. Знаючи значення світлового потоку кожної лампи, можемо визначити необхідну кількість світильників:=400·8·5·1,5·1,1/5220·0,7·2=3(штук)

Загальна потужність освітлювальної установки рівна:

Р=2·80·3=480(Вт)

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

6.3 Пожежна безпека


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

По класифікації приміщень з ПЕОМ по пожежній небезпеці відносяться до категорії В (СНіП 2.09.02-85), що характеризуються наявністю твердих горючих і важко горючих речовин і матеріалів, а також легкозаймистих матеріалів.

Причини пожежі :

паління за робочим місцем;

використовувати нагрівальні прилади в приміщеннях з ПЕОМ;

від’єднувати і приєднування кабелів за не справності і наявності напруги в мережі;

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

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

Технологічні об’ємні підлоги виконуються з негорючих або тяжко горючих матеріалів з межею вогнестійкості не менше 0,5 г. Підпільні простори під об’ємними підлогами відділяють негорючими перегородками з межею вогнестійкості не менше 0,75 г на ділянки площею не більш 250 м2.

Для гасіння можливих пожеж передбачена наявність первинних засобів пожежогасіння, згідно «Правил пожежної безпеки в Україні» так і пожежні крани із брезентовими рукавами, пожежні щити (1 щит на 5000м2).

В кожній кімнаті знаходяться вогнегасники. Вогнегасники діляться на хімічні, пінні, повітряно-пінні, СО2 - вогнегасники і порошкові.

Вогнегасники допускаються до експлуатації якщо їхні технічні характеристики відповідають нормативним значенням, встановленим експлуатаційно-технічною документацією. Зменшення змісту вогнегасочої речовини і тиску у вогнегасниках не повинне перевищувати 10 % від встановленого номінального значення.

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

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

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

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

У приміщенні знаходиться розроблений і розміщений на видному місці план евакуації людей і матеріальних цінностей при пожежі з яким ознайомлені працівники підприємства.

ВИСНОВКИ


У процесі виконання дипломної роботи було дослідження та проведений аналіз алгоритмів кодування даних. В процесі дослідження було створено систему для проведення аналізу алгоритмів кодування даних. Розроблена система дозволяє:

·          проаналізувати властивості алгоритмів кодування даних;

·        закодувати файл одним з 6 алгоритмів;

·        розкодувати файл одним з 6 алгоритмів.

Щоб реалізувати поставлену задачу потрібно було обрати оптимальну мову програмування. Для вирішення цієї задачі найбільш підходить C#. Ця мова програмування має великі можливості щодо створення прикладного програмного забезпечення та дозволяє створювати різноманітні програмні продукти. Дана програма була створена за допомогою саме цієї мови програмування, що дозволило зробити зручний інтерфейс і автоматизувати виконання дій.

В ході досліджень було з’ясовано, що найбільш захищеним алгоритмом кодування є алгоритм Rijndeal, а алгоритмом хешування є SHA2.

Середовище розробки Visual Studio 2008 Express є унікальною системою, в якій технологія високопродуктивної оптимізуючої компіляції поєднується з візуальними засобами розробки.

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

Таким чином, середовище програмування Visual Studio 2008 Express є одним з визнаних лідерів серед візуальних систем програмування і могутнім інструментом для створення прикладних програмних систем.

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

1.       Бишоп Дж. C# в кратком изложении. -М.: Бином. Лаборатория знаний, 2005.

2.       Гарнаев А.Ю. Самоучитель Visual Studio .NET 2003. - СПб.: БХВ-Петербург, 2003.

.        Грэхем И. Объектно ориентированные методы. - М.: Издательский дом "Вильямс", 2004.

.        Гуннерсон Э. Введение в C#. - СПб.: Питер, 2001.

.        Дубовцев А. Microsoft .Net в подлинеке. - СПб.: БВХ-Петербург, 2008.

.        Кариев Ч.А. Разработка Windows-приложений на основе Visual C# . БИНОМ. Лаборатория знаний, Интернет-университет информационных технологий - ИНТУИТ.ру, 2007.

.        Кент Бек. Экстремальное программировнаие. - СПб.: Питер, 2002.

.        Мартин Ф. Архитектура корпоративных программных приложений. - М.: Издательский дом "Вильямс", 2004.

9.       Лапонина О.Р. Криптографические основы безопасности <http://www.intuit.ru/department/security/networksec/>. - М.: Интернет-университет информационных технологий - ИНТУИТ.ру, 2004. - С. 320. - ISBN 5-9556-00020 </wiki/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:BookSources/5955600020>-5

10.     Нейлгел К., Ивьен Б., Глинн Дж. С# 2008 для профессионалов. -М.: Издательский дом "Вильямс", 2008.

11.     Нильс Фергюсон </w/index.php?title=%D0%A4%D0%B5%D1%80%D0%B3%D1%8E%D1%81%D0%BE%D0%BD,_%D0%9D%D0%B8%D0%BB%D1%8C%D1%81&action=edit&redlink=1>, Брюс Шнайер </wiki/%D0%A8%D0%BD%D0%B0%D0%B9%D0%B5%D1%80,_%D0%91%D1%80%D1%8E%D1%81> Практическая криптография = Practical Cryptography: Designing and Implementing Secure Cryptographic Systems. - М.: «Диалектика» </wiki/%D0%94%D0%B8%D0%B0%D0%BB%D0%B5%D0%BA%D1%82%D0%B8%D0%BA%D0%B0_(%D0%B8%D0%B7%D0%B4%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D1%81%D1%82%D0%B2%D0%BE)>, 2004. - 432 с. - 3 000 экз. - ISBN 5-8459-0733-0 </wiki/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:BookSources/5845907330>, ISBN 0-4712-2357-3 </wiki/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:BookSources/0471223573>

12.     Петцольд Ч. Программирование для Microsoft Windows на C#. - М.: Русская Редакция, 2009.

13.     Прайс Дж., Гандерлой М. Visual C# .NET : Пер. с англ. - М.: ВЕК+, 2005.

.        Прайс Дж. Visual C# .NET Полное руководство. - М.: ВЕК+, 2004.

.        Рихтер Дж.. Программирование на платформе Microsoft .Net Framework. - М.: Русская Редакция, 2007.

.        Робинсон С., Корнес О., Глинн Дж. С# для профессионалов. - М.: Лори, 2008.

17.     Семенов Ю. А. Алгоритм DES <http://book.itep.ru/6/des_641.htm>.

18.     Смайли Дж. Учимся программировать на C# вместе с Джоном Смайли. - СПб.: Диасофт-ЮП, 2008.

19.     Троелсен Э. Язык программирования С# 2005 и платформа .Net 2.0. - М.: Издательский дом "Вильямс", 2007.

.        Троелсен Э. С# и платформа .NET. Библиотека программиста. - СПб.: Питер, 2004.

21.     Фролов А.В. Язык C#. Самоучитель. - М.: Диалог-МИФИ, 2003.

22.     Чакработи А., Кранти Ю., Сандху Р. Microsoft .NET Framework: разработка профессиональных проектов: Пер. с англ. - СПб.: БХВ-Петербург, 2006.

23.     <http://csrc.nist.gov/CryptoToolkit/aes/pre-round1/aes_9701.txt>

.        <http://www.nist.gov/public_affairs/releases/g00-176.htm>

.        <http://csrc.nist.gov/CryptoToolkit/aes/>

.        <http://homes.esat.kuleuven.be/~bosselae/ripemd160.html>

.        <http://homes.esat.kuleuven.be/~cosicart/pdf/AB-9601/> (Исходные коды)

.        <http://www.intuit.ru/> //Интернет-университет информационных технологий

.        <http://ru.wikipedia.org/> // Свободная Интернет-энциклопедия

.        <http://www.rsdn.ru/> // Russian Software Developer Network <http://www.opennet.ru/>

Додаток А

System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Text;System.Windows.Forms;System.Security.Cryptography;System.IO;diplom

{partial class des : Form

{

//desstatic string key="", IV="";static int keysize = 0;tim;static long output = 0;des()

{();

}void Encrypt(String inName, String outName)

{fin = new FileStream(inName, FileMode.Open, FileAccess.Read);fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);.SetLength(0);[] bin = new byte[100];rdlen = 0;totlen = fin.Length;len;des = new DESCryptoServiceProvider();encStream = new CryptoStream(fout, des.CreateEncryptor(), CryptoStreamMode.Write);= des.KeySize;(rdlen < totlen)

{= fin.Read(bin, 0, 100);.Write(bin, 0, len);= rdlen + len;

}= fout.Length + des.Key.Length + des.IV.Length;.Close();

}

//static void EncryptData(String inName, String outName, String desKey, String desIV)

{[] key, IV;

//Create the file streams to handle the input and output files.fin = new FileStream(inName, FileMode.Open, FileAccess.Read);fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);fkey = new FileStream(desKey, FileMode.Open, FileAccess.Read);fIV = new FileStream(desIV, FileMode.Open, FileAccess.Read);.SetLength(0);= new byte[fkey.Length];= new byte[fIV.Length];.Read(key, 0, (int)fkey.Length);.Read(IV, 0, (int)fIV.Length);[] bin = new byte[100];rdlen = 0;totlen = fin.Length;len;des = new DESCryptoServiceProvider();encStream = new CryptoStream(fout, des.CreateEncryptor(key, IV), CryptoStreamMode.Write);= des.KeySize;(rdlen < totlen)

{= fin.Read(bin, 0, 100);.Write(bin, 0, len);= rdlen + len;

}.Close();= fout.Length;

}static void DecryptData(String inName, String outName, String desKey, String desIV)

{[] key, IV;fin = new FileStream(inName, FileMode.Open, FileAccess.Read);fkey = new FileStream(desKey, FileMode.Open, FileAccess.Read);fIV = new FileStream(desIV, FileMode.Open, FileAccess.Read);fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);.SetLength(0);= new byte[fkey.Length];= new byte[fIV.Length];.Read(key,0,(int)fkey.Length);.Read(IV, 0, (int)fIV.Length);

//Create variables to help with read and write.[] bin = new byte[100]; //This is intermediate storage for the encryption.rdlen = 0; //This is the total number of bytes written.totlen = fin.Length; //This is the total length of the input file.len; //This is the number of bytes to be written at a time.des = new DESCryptoServiceProvider();encStream = new CryptoStream(fout, des.CreateDecryptor(key, IV), CryptoStreamMode.Write);= des.KeySize;

//Read from the input file, then encrypt and write to the output file.(rdlen < totlen)

{= fin.Read(bin, 0, 100);.Write(bin, 0, len);= rdlen + len;

}.Close();

}void Form1_Load(object sender, EventArgs e)

{

}void button1_Click(object sender, EventArgs e)

{.FileName = "";.Filter = "DES key file| *.deskey";(saveFileDialog1.ShowDialog() == DialogResult.OK)

{des = new DESCryptoServiceProvider();.GenerateKey();= des.KeySize;= saveFileDialog1.FileName;fkey = new FileStream(saveFileDialog1.FileName, FileMode.Create, FileAccess.Write);.Write(des.Key, 0, des.Key.Length);.Close();

}(key != "" & IV != "")

{.Enabled = true;

}

}void button4_Click(object sender, EventArgs e)

{.FileName = "";.Filter = "DES IV file| *.desIV";(saveFileDialog1.ShowDialog() == DialogResult.OK)

{des = new DESCryptoServiceProvider();.GenerateIV();fiv = new FileStream(saveFileDialog1.FileName, FileMode.Create, FileAccess.Write);= saveFileDialog1.FileName;.Write(des.IV, 0, des.IV.Length);.Close();

}(key != "" & IV != "")

{.Enabled = true;

}

}void button5_Click(object sender, EventArgs e)

{.FileName = "";.Filter = "DES key file| *.deskey";(openFileDialog1.ShowDialog() == DialogResult.OK)

{= openFileDialog1.FileName;

}(key != "" & IV != "")

{.Enabled = true;

}

}void button6_Click(object sender, EventArgs e)

{= openFileDialog1.FileName;

}(key != "" & IV != "")

{.Enabled = true;

}

}void button2_Click(object sender, EventArgs e)

{.FileName = "";.Filter = "All file| *.*";.FileName = "";.Filter = "DES file| *.des";(openFileDialog1.ShowDialog() == DialogResult.OK)

{(saveFileDialog1.ShowDialog() == DialogResult.OK)

{=DateTime.Now;(openFileDialog1.FileName, saveFileDialog1.FileName,key,IV);.Text = (DateTime.Now - tim).ToString();

}

}

}void button3_Click(object sender, EventArgs e)

{.FileName = "";.Filter = "DES file| *.des";.FileName = "";.Filter = "All file| *.*";(openFileDialog1.ShowDialog() == DialogResult.OK)

{(saveFileDialog1.ShowDialog() == DialogResult.OK)

{= DateTime.Now;(openFileDialog1.FileName, saveFileDialog1.FileName, key, IV);.Text = (DateTime.Now - tim).ToString();

}

}

}

}

}System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Windows.Forms;diplom

{partial class Main : Form

{tim;Main()

{();

}void tripleDESToolStripMenuItem_Click(object sender, EventArgs e)

{fm = new tdes();.ShowDialog();

}void dESToolStripMenuItem_Click(object sender, EventArgs e)

{fm = new des();.ShowDialog();

}void encodeToolStripMenuItem_Click(object sender, EventArgs e)

{(openFileDialog1.ShowDialog()==DialogResult.OK)

{.Value = 1;tdesf = new tdes();.Value = 2;= DateTime.Now;.Encrypt(openFileDialog1.FileName, openFileDialog1.FileName + "tdes");.Text = (DateTime.Now - tim).ToString();.Value = 3;.Text = tdes.keysize.ToString();.Value = 4;.Text = tdes.output.ToString();.Value = 5;.Dispose();.Value = 1;desf = new des();.Value = 2;= DateTime.Now;.Encrypt(openFileDialog1.FileName, openFileDialog1.FileName + "des");.Text = (DateTime.Now - tim).ToString();.Value = 3;.Text = des.keysize.ToString();.Value = 4;.Text = des.output.ToString();.Value = 5;.Dispose();.Value = 1;rc2f = new rc2();.Value = 2;= DateTime.Now;f.Encrypt(openFileDialog1.FileName, openFileDialog1.FileName + "rc2");.Text = (DateTime.Now - tim).ToString();.Value = 3;.Text = rc2.keysize.ToString();.Value = 4;.Text = rc2.output.ToString();.Value = 5;f.Dispose();.Value = 1;rijf = new Rijnder();.Value = 2;= DateTime.Now;.Encrypt(openFileDialog1.FileName, openFileDialog1.FileName + "rij");.Text = (DateTime.Now - tim).ToString();.Value = 3;.Text = Rijnder.keysize.ToString();.Value = 4;.Text = Rijnder.output.ToString();.Value = 5;.Dispose();.Value = 1;ripf = new RIPEMD160();.Value = 2;= DateTime.Now;.Hash(openFileDialog1.FileName, openFileDialog1.FileName + "rip");.Text = (DateTime.Now - tim).ToString();.Value = 3;.Text = RIPEMD160.keysize.ToString();.Value = 4;.Text = RIPEMD160.output.ToString();.Value = 5;.Dispose();.Value = 1;shaf = new SHA512();.Value = 2;= DateTime.Now;.Hash(openFileDialog1.FileName, openFileDialog1.FileName + "sha");.Text = (DateTime.Now - tim).ToString();.Value = 3;.Text = SHA512.keysize.ToString();.Value = 4;.Text = SHA512.output.ToString();.Value = 5;.Dispose();

}

}void rijnderToolStripMenuItem_Click(object sender, EventArgs e)

{fm = new Rijnder();.ShowDialog();

}void mD5ToolStripMenuItem_Click(object sender, EventArgs e)

{fm = new RIPEMD160();.ShowDialog();

}void rSAToolStripMenuItem_Click(object sender, EventArgs e)

{fm = new SHA512();.ShowDialog();

}void saveFilToolStripMenuItem_Click(object sender, EventArgs e)

{.Exit();

}void rC2ToolStripMenuItem_Click(object sender, EventArgs e)

{fm = new rc2();.ShowDialog();

}

}

}System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Windows.Forms;System.Security.Cryptography;System.IO;diplom

{partial class rc2 : Form

{static string key = "", IV = "";static int keysize = 0;static long output=0;tim;rc2()

{();

}

//void Encrypt(String inName, String outName)

{fin = new FileStream(inName, FileMode.Open, FileAccess.Read);fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);.SetLength(0);[] bin = new byte[100];rdlen = 0;totlen = fin.Length;len;CryptoServiceProvider rc2 = new RC2CryptoServiceProvider();encStream = new CryptoStream(fout, rc2.CreateEncryptor(), CryptoStreamMode.Write);= rc2.KeySize;(rdlen < totlen)

{= fin.Read(bin, 0, 100);.Write(bin, 0, len);= rdlen + len;

}= fout.Length + rc2.Key.Length + rc2.IV.Length;.Close();

}

//static void EncryptData(String inName, String outName, String desKey, String desIV)

{[] key, IV;fin = new FileStream(inName, FileMode.Open, FileAccess.Read);fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);fkey = new FileStream(desKey, FileMode.Open, FileAccess.Read);fIV = new FileStream(desIV, FileMode.Open, FileAccess.Read);.SetLength(0);= new byte[fkey.Length];= new byte[fIV.Length];.Read(key, 0, (int)fkey.Length);.Read(IV, 0, (int)fIV.Length);[] bin = new byte[100];rdlen = 0;totlen = fin.Length;len;CryptoServiceProvider rc2 = new RC2CryptoServiceProvider();encStream = new CryptoStream(fout, rc2.CreateEncryptor(key, IV), CryptoStreamMode.Write);= rc2.KeySize;(rdlen < totlen)

{= fin.Read(bin, 0, 100);.Write(bin, 0, len);= rdlen + len;

}.Close();= fout.Length;

}static void DecryptData(String inName, String outName, String desKey, String desIV)

{[] key, IV;fin = new FileStream(inName, FileMode.Open, FileAccess.Read);fkey = new FileStream(desKey, FileMode.Open, FileAccess.Read);fIV = new FileStream(desIV, FileMode.Open, FileAccess.Read);fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);.SetLength(0);= new byte[fkey.Length];= new byte[fIV.Length];.Read(key, 0, (int)fkey.Length);.Read(IV, 0, (int)fIV.Length);[] bin = new byte[100];rdlen = 0;totlen = fin.Length;len;CryptoServiceProvider rc2 = new RC2CryptoServiceProvider();encStream = new CryptoStream(fout, rc2.CreateDecryptor(key, IV), CryptoStreamMode.Write);= rc2.KeySize;(rdlen < totlen)

{= fin.Read(bin, 0, 100);.Write(bin, 0, len);= rdlen + len;

}.Close();

}void button1_Click(object sender, EventArgs e)

{.FileName = "";.Filter = "RC2 key file| *.rc2key";(saveFileDialog1.ShowDialog() == DialogResult.OK)

{CryptoServiceProvider rc2 = new RC2CryptoServiceProvider();.GenerateKey();= rc2.KeySize;= saveFileDialog1.FileName;fkey = new FileStream(saveFileDialog1.FileName, FileMode.Create, FileAccess.Write);.Write(rc2.Key, 0, rc2.Key.Length);.Close();

}(key != "" & IV != "")

{.Enabled = true;

}

}void button2_Click(object sender, EventArgs e)

{.FileName = "";.Filter = "RC2 IV file| *.rc2IV";(saveFileDialog1.ShowDialog() == DialogResult.OK)

{CryptoServiceProvider rc2 = new RC2CryptoServiceProvider();.GenerateIV();fiv = new FileStream(saveFileDialog1.FileName, FileMode.Create, FileAccess.Write);= saveFileDialog1.FileName;.Write(rc2.IV, 0, rc2.IV.Length);.Close();

}(key != "" & IV != "")

{.Enabled = true;

}

}void button3_Click(object sender, EventArgs e)

{.FileName = "";.Filter = "RC2 key file| *.rc2key";(openFileDialog1.ShowDialog() == DialogResult.OK)

{= openFileDialog1.FileName;

}(key != "" & IV != "")

{.Enabled = true;

}

}void button4_Click(object sender, EventArgs e)

{.FileName = "";.Filter = "RC2 IV file| *.rc2IV";(openFileDialog1.ShowDialog() == DialogResult.OK)

{= openFileDialog1.FileName;

}(key != "" & IV != "")

{.Enabled = true;

}

}void button5_Click(object sender, EventArgs e)

{.FileName = "";.Filter = "All file| *.*";.FileName = "";.Filter = "RC2 file| *.rc2";(openFileDialog1.ShowDialog() == DialogResult.OK)

{(saveFileDialog1.ShowDialog() == DialogResult.OK)

{= DateTime.Now;(openFileDialog1.FileName, saveFileDialog1.FileName, key, IV);.Text = (DateTime.Now - tim).ToString();

}

}

}void button6_Click(object sender, EventArgs e)

{.FileName = "";.Filter = "RC2 file| *.rc2";.FileName = "";.Filter = "All file| *.*";(openFileDialog1.ShowDialog() == DialogResult.OK)

{(saveFileDialog1.ShowDialog() == DialogResult.OK)

{= DateTime.Now;(openFileDialog1.FileName, saveFileDialog1.FileName, key, IV);.Text = (DateTime.Now - tim).ToString();

}

}

}

}

}System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Windows.Forms;System.Security.Cryptography;System.IO;diplom

{partial class Rijnder : Form

{

//rijnderstatic string key = "", IV = "";static int keysize = 0;tim;static long output = 0;Rijnder()

{();

}

//void Encrypt(String inName, String outName)

{fin = new FileStream(inName, FileMode.Open, FileAccess.Read);fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);.SetLength(0);[] bin = new byte[100];rdlen = 0;totlen = fin.Length;len;rij = new RijndaelManaged();encStream = new CryptoStream(fout, rij.CreateEncryptor(), CryptoStreamMode.Write);= rij.KeySize;(rdlen < totlen)

{= fin.Read(bin, 0, 100);.Write(bin, 0, len);= rdlen + len;

}= fout.Length + rij.Key.Length + rij.IV.Length;.Close();

}

//static void EncryptData(String inName, String outName, String desKey, String desIV)

{[] key, IV;

//Create the file streams to handle the input and output files.fin = new FileStream(inName, FileMode.Open, FileAccess.Read);fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);fkey = new FileStream(desKey, FileMode.Open, FileAccess.Read);fIV = new FileStream(desIV, FileMode.Open, FileAccess.Read);.SetLength(0);= new byte[fkey.Length];= new byte[fIV.Length];.Read(key, 0, (int)fkey.Length);.Read(IV, 0, (int)fIV.Length);

//Create variables to help with read and write.[] bin = new byte[100]; //This is intermediate storage for the encryption.rdlen = 0; //This is the total number of bytes written.totlen = fin.Length; //This is the total length of the input file.len; //This is the number of bytes to be written at a time.reij = new RijndaelManaged();encStream = new CryptoStream(fout, reij.CreateEncryptor(key, IV), CryptoStreamMode.Write);= reij.KeySize;

//Read from the input file, then encrypt and write to the output file.(rdlen < totlen)

{= fin.Read(bin, 0, 100);.Write(bin, 0, len);= rdlen + len;

}.Close();= fout.Length;

}static void DecryptData(String inName, String outName, String desKey, String desIV)

{[] key, IV;

//Create the file streams to handle the input and output files.fin = new FileStream(inName, FileMode.Open, FileAccess.Read);fkey = new FileStream(desKey, FileMode.Open, FileAccess.Read);fIV = new FileStream(desIV, FileMode.Open, FileAccess.Read);fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);.SetLength(0);= new byte[fkey.Length];= new byte[fIV.Length];.Read(key, 0, (int)fkey.Length);.Read(IV, 0, (int)fIV.Length);

//Create variables to help with read and write.[] bin = new byte[100]; //This is intermediate storage for the encryption.rdlen = 0; //This is the total number of bytes written.totlen = fin.Length; //This is the total length of the input file.len; //This is the number of bytes to be written at a time.

reij = new RijndaelManaged();encStream = new CryptoStream(fout, reij.CreateDecryptor(key, IV), CryptoStreamMode.Write);= reij.KeySize;

//Read from the input file, then encrypt and write to the output file.(rdlen < totlen)

{= fin.Read(bin, 0, 100);.Write(bin, 0, len);= rdlen + len;

}.Close();

}void button1_Click(object sender, EventArgs e)

{.FileName = "";.Filter = "RIJNDAEL key file| *.rijkey";(saveFileDialog1.ShowDialog() == DialogResult.OK)

{rij = new RijndaelManaged();.GenerateKey();= rij.KeySize;= saveFileDialog1.FileName;fkey = new FileStream(saveFileDialog1.FileName, FileMode.Create, FileAccess.Write);.Write(rij.Key, 0, rij.Key.Length);.Close();

}(key != "" & IV != "")

{.Enabled = true;

}

}void button4_Click(object sender, EventArgs e)

{.FileName = "";.Filter = "RIJNDAEL IV file| *.rijIV";(saveFileDialog1.ShowDialog() == DialogResult.OK)

{rij = new RijndaelManaged();.GenerateIV();fiv = new FileStream(saveFileDialog1.FileName, FileMode.Create, FileAccess.Write);= saveFileDialog1.FileName;.Write(rij.IV, 0, rij.IV.Length);.Close();

}(key != "" & IV != "")

{.Enabled = true;

}

}void button5_Click(object sender, EventArgs e)

{.FileName = "";.Filter = "RIJNDAEL key file| *.rijkey";(openFileDialog1.ShowDialog() == DialogResult.OK)

{= openFileDialog1.FileName;

}(key != "" & IV != "")

{.Enabled = true;

}

}void button6_Click(object sender, EventArgs e)

{.FileName = "";.Filter = "RIJNDAEL IV file| *.rijIV";(openFileDialog1.ShowDialog() == DialogResult.OK)

{= openFileDialog1.FileName;

}(key != "" & IV != "")

{.Enabled = true;

}

}void button2_Click(object sender, EventArgs e)

{.FileName = "";.Filter = "All file| *.*";.FileName = "";.Filter = "RIJNDAEL file| *.rij";(openFileDialog1.ShowDialog() == DialogResult.OK)

{(saveFileDialog1.ShowDialog() == DialogResult.OK)

{= DateTime.Now;(openFileDialog1.FileName, saveFileDialog1.FileName, key, IV);.Text = (DateTime.Now - tim).ToString();

}

}

}void button3_Click(object sender, EventArgs e)

{.FileName = "";.Filter = "RIJNDAEL file| *.rij";.FileName = "";.Filter = "All file| *.*";(openFileDialog1.ShowDialog() == DialogResult.OK)

{(saveFileDialog1.ShowDialog() == DialogResult.OK)

{= DateTime.Now;(openFileDialog1.FileName, saveFileDialog1.FileName, key, IV);.Text = (DateTime.Now - tim).ToString();

}

}

}

}

}System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Windows.Forms;System.Security.Cryptography;System.IO;diplom

{partial class RIPEMD160 : Form

{static int keysize;static long output;DateTime tim;RIPEMD160()

{();

}void Hash(string inName,string outName)

{fin = new FileStream(inName, FileMode.Open, FileAccess.Read);fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);.SetLength(0);[] hashValue;Managed rip = new RIPEMD160Managed();= rip.ComputeHash(fin);= rip.HashSize;.Write(hashValue,0,hashValue.Length);= fout.Length + fin.Length;.Close();.Close();

}string Chek(string inName, string outName)

{s=string.Empty;fin = new FileStream(inName, FileMode.Open, FileAccess.Read);fout = new FileStream(outName, FileMode.Open, FileAccess.Read);[] hashValue;[] hashValue1 = new byte[fout.Length];Managed rip = new RIPEMD160Managed();= rip.ComputeHash(fin);.Read(hashValue1, 0, (int)fout.Length);.Close();.Close();(var i in hashValue.Except(hashValue1))

{= "Не идентичные";

}(s == string.Empty) { s = "Идентичные"; }s;

}void button1_Click(object sender, EventArgs e)

{.FileName = "";.Filter = "All file| *.*";.FileName = "";.Filter = "RIPEMD160 file| *.rip";(openFileDialog1.ShowDialog() == DialogResult.OK)

{(saveFileDialog1.ShowDialog() == DialogResult.OK)

{= DateTime.Now;(openFileDialog1.FileName, saveFileDialog1.FileName);.Text = (DateTime.Now - tim).ToString();

}

}

}void button2_Click(object sender, EventArgs e)

{.FileName = "";.Filter = "All file| *.*";.FileName = "";.Filter = "RIPEMD160 file| *.rip";(openFileDialog1.ShowDialog() == DialogResult.OK)

{(openFileDialog2.ShowDialog() == DialogResult.OK)

{.Text = Chek(openFileDialog1.FileName, openFileDialog2.FileName);

}

}

}

}

}System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Windows.Forms;System.IO;System.Security.Cryptography;diplom

{partial class SHA512 : Form

{static int keysize;static long output;DateTime tim;SHA512()

{();

}void Hash(string inName, string outName)

{fin = new FileStream(inName, FileMode.Open, FileAccess.Read);fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);.SetLength(0);[] hashValue;CryptoServiceProvider sha = new SHA512CryptoServiceProvider();= sha.ComputeHash(fin);= sha.HashSize;.Write(hashValue, 0, hashValue.Length);= fout.Length + fin.Length;.Close();.Close();

}string Chek(string inName, string outName)

{s = string.Empty;fin = new FileStream(inName, FileMode.Open, FileAccess.Read);fout = new FileStream(outName, FileMode.Open, FileAccess.Read);[] hashValue;[] hashValue1 = new byte[fout.Length];CryptoServiceProvider sha = new SHA512CryptoServiceProvider();= sha.ComputeHash(fin);.Read(hashValue1, 0, (int)fout.Length);.Close();.Close();(var i in hashValue.Except(hashValue1))

{= "Не идентичные";

}(s == string.Empty) { s = "Идентичные"; }s;

}void button1_Click(object sender, EventArgs e)

{.FileName = "";.Filter = "All file| *.*";.FileName = "";.Filter = "SHA512 file| *.sha512";(openFileDialog1.ShowDialog() == DialogResult.OK)

{(saveFileDialog1.ShowDialog() == DialogResult.OK)

{= DateTime.Now;(openFileDialog1.FileName, saveFileDialog1.FileName);.Text = (DateTime.Now - tim).ToString();

}

}

}void button2_Click(object sender, EventArgs e)

{.FileName = "";.Filter = "All file| *.*";.FileName = "";.Filter = "SHA512 file| *.sha512";(openFileDialog1.ShowDialog() == DialogResult.OK)

{(openFileDialog2.ShowDialog() == DialogResult.OK)

{.Text = Chek(openFileDialog1.FileName, openFileDialog2.FileName);

}

}

}

}

}System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Text;System.Windows.Forms;System.Security.Cryptography;System.IO;diplom

{partial class tdes : Form

{static string key="", IV="";static int keysize = 0;tim;static long output = 0;tdes()

{();

}

//void Encrypt(String inName, String outName)

{fin = new FileStream(inName, FileMode.Open, FileAccess.Read);fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);.SetLength(0);[] bin = new byte[100];rdlen = 0;totlen = fin.Length;len;tdes = new TripleDESCryptoServiceProvider();encStream = new CryptoStream(fout, tdes.CreateEncryptor(), CryptoStreamMode.Write);= tdes.KeySize;(rdlen < totlen)

{= fin.Read(bin, 0, 100);.Write(bin, 0, len);= rdlen + len;

}= fout.Length + tdes.Key.Length + tdes.IV.Length;.Close();

}

//static void EncryptData(String inName, String outName, String tdesKey, String tdesIV)

{[] key, IV;

//Create the file streams to handle the input and output files.fin = new FileStream(inName, FileMode.Open, FileAccess.Read);fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);fkey = new FileStream(tdesKey, FileMode.Open, FileAccess.Read);fIV = new FileStream(tdesIV, FileMode.Open, FileAccess.Read);.SetLength(0);= new byte[fkey.Length];= new byte[fIV.Length];.Read(key, 0, (int)fkey.Length);.Read(IV, 0, (int)fIV.Length);

//Create variables to help with read and write.[] bin = new byte[100]; //This is intermediate storage for the encryption.rdlen = 0; //This is the total number of bytes written.totlen = fin.Length; //This is the total length of the input file.len; //This is the number of bytes to be written at a time.tdes = new TripleDESCryptoServiceProvider();encStream = new CryptoStream(fout, tdes.CreateEncryptor(key, IV), CryptoStreamMode.Write);= tdes.KeySize;

//Read from the input file, then encrypt and write to the output file.(rdlen < totlen)

{= fin.Read(bin, 0, 100);.Write(bin, 0, len);= rdlen + len;

}= fout.Length;.Close();

}static void DecryptData(String inName, String outName, String tdesKey, String tdesIV)

{[] key, IV;

//Create the file streams to handle the input and output files.fin = new FileStream(inName, FileMode.Open, FileAccess.Read);fkey = new FileStream(tdesKey, FileMode.Open, FileAccess.Read);fIV = new FileStream(tdesIV, FileMode.Open, FileAccess.Read);fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);.SetLength(0);= new byte[fkey.Length];= new byte[fIV.Length];.Read(key,0,(int)fkey.Length);.Read(IV, 0, (int)fIV.Length);

//Create variables to help with read and write.[] bin = new byte[100]; //This is intermediate storage for the encryption.rdlen = 0; //This is the total number of bytes written.totlen = fin.Length; //This is the total length of the input file.len; //This is the number of bytes to be written at a time.tdes = new TripleDESCryptoServiceProvider();encStream = new CryptoStream(fout, tdes.CreateDecryptor(key, IV), CryptoStreamMode.Write);= tdes.KeySize;

//Read from the input file, then encrypt and write to the output file.(rdlen < totlen)

{= fin.Read(bin, 0, 100);.Write(bin, 0, len);= rdlen + len;

}.Close();

}void Form1_Load(object sender, EventArgs e)

{

}void button1_Click(object sender, EventArgs e)

{.FileName = "";.Filter = "TDES key file| *.tdeskey";(saveFileDialog1.ShowDialog() == DialogResult.OK)

{tdes = new TripleDESCryptoServiceProvider();.GenerateKey();= saveFileDialog1.FileName;fkey = new FileStream(saveFileDialog1.FileName, FileMode.Create, FileAccess.Write);.Write(tdes.Key, 0, tdes.Key.Length);.Close();

}(key != "" & IV != "")

{.Enabled = true;

}

}void button4_Click(object sender, EventArgs e)

{.FileName = "";.Filter = "TDES IV file| *.tdesIV";(saveFileDialog1.ShowDialog() == DialogResult.OK)

{tdes = new TripleDESCryptoServiceProvider();.GenerateIV();fiv = new FileStream(saveFileDialog1.FileName, FileMode.Create, FileAccess.Write);= saveFileDialog1.FileName;.Write(tdes.IV, 0, tdes.IV.Length);.Close();

}(key != "" & IV != "")

{.Enabled = true;

}

}void button5_Click(object sender, EventArgs e)

{.FileName = "";.Filter = "TDES key file| *.tdeskey";(openFileDialog1.ShowDialog() == DialogResult.OK)

{= openFileDialog1.FileName;

}(key != "" & IV != "")

{.Enabled = true;

}

}void button6_Click(object sender, EventArgs e)

{.FileName = "";.Filter = "TDES IV file| *.tdesIV";(openFileDialog1.ShowDialog() == DialogResult.OK)

{= openFileDialog1.FileName;

}(key != "" & IV != "")

{.Enabled = true;

}

}void button2_Click(object sender, EventArgs e)

{.FileName = "";.Filter = "All file| *.*";.FileName = "";.Filter = "TDES file| *.tdes";(openFileDialog1.ShowDialog() == DialogResult.OK)

{(saveFileDialog1.ShowDialog() == DialogResult.OK)

{=DateTime.Now;(openFileDialog1.FileName, saveFileDialog1.FileName,key,IV);.Text = (DateTime.Now - tim).ToString();

}

}

}void button3_Click(object sender, EventArgs e)

{.FileName = "";.Filter = "TDES file| *.tdes";.FileName = "";.Filter = "All file| *.*";(openFileDialog1.ShowDialog() == DialogResult.OK)

{(saveFileDialog1.ShowDialog() == DialogResult.OK)

{= DateTime.Now;(openFileDialog1.FileName, saveFileDialog1.FileName, key, IV);.Text = (DateTime.Now - tim).ToString();

}

}

}

}

}

Похожие работы на - Дослідження та порівняльний аналіз алгоритмів кодування даних

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!