Please use this identifier to cite or link to this item: https://er.chdtu.edu.ua/handle/ChSTU/7737
Title: Практична реалізація алгоритму AES для криптографічного захисту даних
Authors: Палагін, Володимир Васильович
Патлань, Дана Володимирівна
Keywords: advanced encryption standard;шифротекст;операція xor;шиф рування даних;дешифрування;криптографічне перетворення тексту
Issue Date: 2022
Abstract: Аналіз алгоритмів симетричного шифрування даних, принципи побудови алгоритму шифрування даних AES, практична реалізація симетричного криптоалгоритму AES
URI: https://er.chdtu.edu.ua/handle/ChSTU/7737
Appears in Collections:125 Кібербезпека та захист інформації (Безпека інформаційних і комунікаційних систем)

Files in This Item:
File Description SizeFormat 
Б_125_Патлань_Палагін.pdf
  Restricted Access
3.36 MBAdobe PDFView/Open Request a copy


Items in DSpace are protected by copyright, with all rights reserved, unless otherwise indicated.

Extracted text
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ 
ЧЕРКАСЬКИЙ ДЕРЖАВНИЙ ТЕХНОЛОГІЧНИЙ УНІВЕРСИТЕТ 
ФАКУЛЬТЕТ ЕЛЕКТРОННИХ ТЕХНОЛОГІЙ І РОБОТОТЕХНІКИ 
КАФЕДРА РОБОТОТЕХНІЧНИХ І ТЕЛЕКОМУНІКАЦІЙНИХ СИСТЕМ ТА КІ-
БЕРБЕЗПЕКИ 
До захисту допущено  
завідувач кафедри РТСК 
д.т.н., професор  
_______________ В.В. Палагін  
"_____" _____________ 2022 року 
Пояснювальна записка 
до кваліфікаційної роботи 
бакалавра 
(освітньо-кваліфікаційний рівень) 
на тему Практична реалізація алгоритму AES для криптографічного захисту 
даних 
Виконав: студент  4  курсу, групи    БІ-81 
Спеціальності         125 – «Кібербезпека» , 
(шифр і назва спеціальності) 
освітньої програми  «Безпека інформаційних і ко-
мунікаційних систем» 
 (назва освітньої програми) 
 Патлань Д.В. 
(прізвище та ініціали)
Керівник   Палагін В.В. 
(прізвище та ініціали)
Рецензент  Андрієнко В.А. 
(прізвище та ініціали)
Черкаси – 2022 року 
Форма № Н-9.01 
ЧЕРКАСЬКИЙ ДЕРЖАВНИЙ ТЕХНОЛОГІЧНИЙ УНІВЕРСИТЕТ 
Факультет  електронних технологій і робототехніки 
Кафедра  робототехнічних і телекомунікаційних систем та кібербезпеки 
Освітньо-кваліфікаційний рівень  бакалавр 
Спеціальність  125 – Кібербезпека  
Освітня програма  – Безпека інформаційних і комунікаційних систем 
ЗАТВЕРДЖУЮ 
Завідувач кафедри В.В. Палагін 
“_____” ___________________ 2022 року 
ЗАВДАННЯ
НА КВАЛІФІКАЦІЙНУ РОБОТУ СТУДЕНТУ 
Патлань Дани Володимирівни__________________ 
(прізвище, ім’я, по батькові) 
1. Тема проекту (роботи) Практична реалізація алгоритму AES для криптографічного
захисту даних
керівник проекту (роботи)  Палагін Володимир Васильович 
(прізвище, ім’я, по батькові, науковий ступінь, вчене звання) 
затверджені наказом вищого навчального закладу від «18» лютого 2022 року № 58/04 
2. Термін здачі студентом закінченої роботи «25»  травня 2022 року_________ 
3. Вихідні дані до роботи: вид шифру – симетричний блоковий шифр AES Advanced
Encryption Standard, розмірність ключа – на вибір,  довжина блоку – 128 біт, кільксть
раундів – залежить від довжини ключа, мова програмування – Python.
4. Зміст розрахунково-пояснювальної записки (перелік питань, що їх належить розробити)
Вступ; Аналіз алгоритмів симетричного шифрування даних; Принципи побудови
алгоритму шифрування даних AES; Практична реалізація симетричного
криптоалгоритму AES; Охорона праці; Висновки; Список використаних джерел; одатки.
5. Перелік графічного матеріалу (з точним зазначенням обов’язкових креслень, плакатів)
схематичні представлення роботи криптографічних алгоритмів шифрування, блок-схеми
процесів шифрування та дешифрування алгоритму AES, скріншоти роботи програми,
мультимедійна презентація, охорона праці.    ________________________
.
6. Консультанти з проекту (роботи) із зазначенням розділів проекту, що їх стосуються
Прізвище, ініціали та посада Підпис, дата 
Розділ консультанта завдання завдання 
видав прийняв 
Охорона праці Кожем’якін О.С. 
старший викладач кафедри 
безпеки життєдіяльності 
7. Дата видачі завдання 18 лютого 2022 року 
КАЛЕНДАРНИЙ ПЛАН 
№ Назва етапів дипломного Строк виконання 
з/п проекту (роботи)  етапів проекту Примітка 
(роботи) 
1. Пошук і аналіз інформації по заданій темі 10.01.2022-
13.02.2022 
2. Написання І розділу: Аналіз алгоритмів 14.02.2022-
симетричного шифрування даних 06.03.2022 
3. Написання ІІ розділу: Принципи побудови 07.03.2022- 
алгоритму шифрування даних AES 27.04.2022 
4. Написання ІІІ розділу: Практична реалізація 28.04.2022- 
симетричного криптоалгоритму AES 01.05.2022 
5. Виконання розділу охорони праці 02.05.2022-
23.05.2022 
6. Написання вступу і висновків, складання 22.05.2022 
списку літератури 
7. Оформлення пояснювальної записки 09.05.2022-
23.05.2022 
8. Оформлення плакатів презентації 09.05.2022-
23.05.2022 
Студент      Патлань Д.В. 
( підпис ) (прізвище та ініціали)
Керівник проекту (роботи) Палагін В.В. 
( підпис ) (прізвище та ініціали)
ЗМІСТ 
ВСТУП .......................................................................................................................... 5 
1. АНАЛІЗ АЛГОРИТМІВ СИМЕТРИЧНОГО ШИФРУВАННЯ ДАНИХ .......... 7 
   1.1 Поняття та види шифрування даних ................................................................ 7 
   1.2 Практичне застосування криптоалгоритмів .................................................... 8 
   1.3 Принципи побудови алгоритмів шифрування даних ..................................... 9 
   1.4 Аналіз функціонування симетричних криптоалгоритмів ............................ 10 
   1.5 Приклади симетричних алгоритмів ................................................................ 11 
   1.6 Висновки ........................................................................................................... 13 
2. ПРИНЦИПИ ПОБУДОВИ АЛГОРИТМУ ШИФРУВАННЯ AES .................. 14 
   2.1 Загальна характеристика криптоалгоритму .................................................. 14 
   2.2 Математичні основи побудови симетиричного криптоалгоритму AES .... 15 
   2.3 Удосконалення криптоалгоритму AES .......................................................... 17 
   2.4 Висновки ........................................................................................................... 22 
3. ПРАКТИЧНА РЕАЛІЗАЦІЯ КРИПТОАЛГОРИТМУ AES ............................. 23 
   3.1 Вибір середовища та мови програмування.................................................... 23 
   3.2 Програмна реалізація криптоалгоритму AES ............................................... 24 
      3.2.1 Реалізація процесу шифрування ............................................................... 24 
      3.2.2 Реалізація процесу дешифрування ........................................................... 30 
   3.3 Програмна реалізація удосконаленого криптоалгоритму AES ................... 34 
   3.4 Розробка графічного інтерфейсу та тестування програми .......................... 36 
   3.5 Порівняльний аналіз практичної реалізації криптоалгоритмів AES .......... 42 
   3.6 Висновки ........................................................................................................... 45 
РОЗДІЛ 4. ОХОРОНА ПРАЦІ ................................................................................. 46 
   4.1. Аналіз небезпек та шкідливостей, які впливають на працівників офісного 
приміщення ................................................................................................................ 46 
 
 
 БІ81.022.18007.248 ПЗ 
Змн.  Арк. № докум. Підпис Дата 
 Розро б. Патлань Д.В. Літ. Арк. Аркушів 
 Перев ір. Палагін В.В. Практична реалізація алгори-
   тму  AES для криптографічного 
 Н. Контр. захисту даних 
 Затверд. Палагін В.В. 3 
 
   4.2. Розробка системи штучного освітлення ....................................................... 53 
ВИСНОВКИ ............................................................................................................... 57 
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ ................................................................. 59 
ДОДАТОК А. Лістинг програмної реалізації криптоалгоритму AES ................. 60 
ДОДАТОК Б. Ілюстративний матеріал ................................................................... 68 
 
  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 4 
 
ВСТУП 
 
Питання забезпечення безпеки та схоронності даних на сьогоднішній день 
дуже актуальні в будь-якій діяльності. Інформацію можна захищати по-різному: 
фізично обмежити до неї доступ, встановити правила роботи з даними нормативно-
правовими актами, чи зашифрувати певні дані. При шифруванні інформація зміню-
ється таким чином, що сторонні особи не можуть витягти з неї нічого цінного, але 
при цьому той, кому ця інформація адресована, може перетворити її в початковий 
вигляд. З плином часу до алгоритмів шифрування висуваються все більш суворі 
вимоги, адже прості шифри можна легко та швидко взламати.  
Загалом виділяють два методи шифрування – симетричне і асиметричне. Осо-
бливістю симетричного шифрування є простота процесу, так як використовується 
один ключ як для шифрування, так і для дешифрування. Одним із найпоширеніших 
алгоритмів шифрування є AES (Advanced Encryption Standard), також відомий як 
Rijndael, який є симетричним блоковим шифром. Цей алгоритм є об’єктом дослі-
дження кваліфікаційної роботи. 
Головною метою роботи є практична реалізація криптоалгоритму AES, осо-
бливістю якої є його удосконалення для зменшення часу обробки даних. Причому 
необхідно знайти такі методи оптимізації алгоритму, які не повинні знижувати його 
криптостійкість. Важливою частиною роботи також є порівняльний аналіз звичай-
ної та удосконаленої програмних реалізацій криптоалгоритму. 
У ході кваліфікаційної роботи для досягнення мети були поставлені такі за-
вдання:  
1) пошук та огляд інформаційних джерел, огляд існуючих алгоритмів шифру-
вання; 
2) аналіз алгоритму шифрування даних AES та методів його удосконалення; 
3) розробка загальної структури програмного засобу криптографічного захисту 
інформації, 
4) програмна реалізація криптоалгоритму AES; 
 
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 5 
 
5) програмна реалізація удосконаленого криптоалгоритму AES; 
6) розробка графічного інтерфейсу та тестування програми; 
7) порівняння практичної реалізації криптоалгоритмів AES; 
8) оформлення текстової документації та графічного матеріалу. 
Всі сформульовані етапи роботи занесені до календарного плану із зазначе-
ними строками виконання.   
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 6 
 
1. АНАЛІЗ АЛГОРИТМІВ СИМЕТРИЧНОГО ШИФРУВАННЯ ДАНИХ 
1.1 Поняття та види шифрування даних 
 
Шифрування – процес перетворення будь-якого тексту чи повідомлення у за-
кодовану, нечитабельну форму, з метою захисту інформації від несанкціонованого 
доступу. В цілому процес шифрування виглядає таким чином: відправник викори-
стовує ключ шифрування та зашифровує своє повідомлення; після шифрування за-
шифроване повідомлення (шифротекст) виглядає незрозуміло та його неможливо 
прочитати; одержувач використовує ключ дешифрування для перетворення заши-
фрованого тексту в текст, який можна прочитати. Розшифрування повинно бути 
можливе тільки при наявності ключа шифру. 
Сьогодні використовуються дві основні форми шифрування даних: симетри-
чне шифрування і асиметричне (рис. 1).  
 
Рис. 1.1 – Класифікація алгоритмів шифрування 
 
 
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 7 
 
1.2 Практичне застосування криптоалгоритмів 
 
Широке застосування хмарних обчислень, засобів віддаленого підключення 
з мобільних та віддалених стаціонарних пристроїв через мережі загального призна-
чення призводять до значного ускладнення їхнього захисту. Необхідною умовою 
цього є застосування криптографічного захисту. Практична криптографія широко 
застосовується у мобільному телефонному зв'язку, банківських картах та для захи-
сту даних транзакцій, при використанні безпечної передачі інформації за протоко-
лами SSL/TLS в інтернет-браузерах, у віртуальних приватних мережах (VPN).  
Асиметрична криптографія зазвичай використовується для автентифікації та  
ідентифікації відправника чи одержувача повідомлення, а також в електронному 
документообігу та цифрових підписах. Існують навіть схеми сліпого підпису, які 
дозволяють особі підписати документ без знання його вмісту. Симетричні крипто-
алгоритми можуть застосовуватися для захисту файлів, які містять важливі відомо-
сті. Це допоможе забезпечити дві властивості важливої інформації – її конфіден-
ційність, тобто недоступність для всіх тих, кому явно не дозволено ознайомлення з 
цією інформацією, і цілісність даних, тобто незмінність інформації у процесі її збе-
рігання. 
Ще один напрям застосування криптоалгоритмів – зберігання паролів за до-
помогою криптографічного хешування, адже зберігати паролі у відкритому вигляді 
дуже небезпечно та ризиковано – тоді будь яка особа, яка має доступ до системи 
зберігання паролів, зможе його прочитати. Якщо використовувати алгоритми ши-
фрування – це знизить рівень ризику викрадення паролю. Проте частіше викорис-
товують алгоритми хешування, яке передбачає одностороннє зіставлення рядка зі 
значенням фіксованої довжини. Тобто, коли користувач вводить свій пароль, сис-
тема обчислює його хеш-значення за допомогою криптографічних алгоритмів та 
порівнює його зі значенням, яке зберігається в системі.  
Існує чимало готових алгоритмів шифрування, що мають високу криптостій-
кість. Користувачу залишається лише створити свій унікальний ключ, який вико-
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 8 
 
ристовується як для шифрування, так і в процесі розшифрування. Відомими прик-
ладами асиметричних алгоритмів шифрування є RSA, DSA, Diffie-Hellman, симет-
ричних – AES, DES, 3DES, Blowfish, Twofish, IDEA.  
 
1.3 Принципи побудови алгоритмів шифрування даних 
 
При симетричній криптографії (або шифруванні з симетричним ключем) для 
шифрування і дешифрування використовується один і той же ключ. І у відправ-
ника, і у одержувача є ідентичні копії ключа, які вони зберігають у секреті і нікому 
не передають. Це відрізняється від асиметричного шифрування, в якому викорис-
товуються два ключі – відкритий ключ (до якого може отримати доступ будь-хто, 
адже він передається по відкритому каналу зв’язку) для шифрування інформації і 
закритий ключ для дешифрування інформації. Секретний ключ зберігається у ад-
ресата і ніде не поширюється. Навіть якщо зловмисник буде знати відкритий ключ 
та все розшифроване повідомлення, неможливо знайти секретний ключ.  
Симетричні методи мають значну перевагу – велика швидкість шифрування 
і дешифрування, але є і недолік – необхідно якось передавати секретний ключ оде-
ржувачу. Системи шифрування з використанням відкритого ключа безпечніші, ніж 
алгоритми з використанням тільки секретного ключа, оскільки сторонні особи не 
можуть перехопити ключ у процесі його передавання. Також при симетричному 
шифруванні потрібно створювати новий ключ після кожного сеансу обміну да-
ними, а при асиметричному шифруванні ключі можна залишати незмінними дов-
гий час.  Але водночас асиметричні системи дуже повільні та вимагають значних 
обчислювальних ресурсів, тому часто вони застосовуються разом  з іншими алго-
ритмами. А для компенсації недоліків симетричного шифрування часто застосову-
ється комбінована криптографічна система, де за допомогою асиметричного шиф-
рування передається лише сеансовий ключ, який використовується сторонами для 
обміну даними вже з використанням симетричного шифрування. 
 
БІ81.022.18007.248 ПЗ Арк. 
 
Змн. Арк. № докум. Підпис Дата 9 
 
1.4 Аналіз функціонування симетричних криптоалгоритмів 
 
В процесі симетричного шифрування використовується певний алгоритм, на 
вхід якого надходить вихідне повідомлення та ключ. Цей ключ є незалежним від 
вихідного повідомлення. Часто це повідомлення позначають літерами Р чи М, від 
слів «plaintext» і «message» відповідно. В результаті алгоритмічного перетворення 
отримуємо зашифроване повідомлення С. При різних значеннях ключа зашифро-
вані повідомлення будуть виглядати по-різному. Далі зашифроване повідомлення 
передається отримувачу. Він перетворює його у незашифроване повідомлення, ви-
користовуючи алгоритм дешифрування, на вхід якого подається такий же секрет-
ний ключ, який використовувався і при шифруванні. У результаті незашифроване 
повідомлення і буде початковим вихідним повідомленням (рис. 1.2).  
 
Рис. 1.2 – Загальна схема симетричного шифрування 
 
Симетричні алгоритми діляться на два основних типи: потокові і блокові ши-
фри (див. рис. 1.1). Блокові шифри обробляють та шифрують дані блоками тексту 
визначеної довжини (наприклад, 64, 128 біт), а потокові шифри шифрують дані по 
одному біту чи байту за раз. В свою чергу потокові шифри поділяються на синх-
ронні шифри та шифри із самосинхронізацією. 
Синхронні потокові шифри – це шифри, в яких потік ключів генерується не-
залежно від відкритого й зашифрованого повідомлення. Самосинхронізуючі пото-
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 10 
 
кові шифри – це шифри, в яких потік ключів створюється функцією ключа й фік-
сованою кількістю знаків зашифрованого повідомлення. Внутрішній стан генера-
тора потоку ключів є функцією попередніх n бітів зашифрованого повідомлення 
[1]. 
Класичні блокові алгоритми шифрування з симетричним ключем можна роз-
ділити на дві великі групи: шифри підстановки та шифри перестановки. У шифрі 
підстановки один символ замінюється на інший символ; у шифрі перестановки – 
змінюються лише позиції символів у вихідному тексті. 
Стандартні алгоритми шифрування для підвищення криптостійкості реалізу-
ють багато етапів (раундів) шифрування, на кожному з яких відповідно до обраного 
ключа використовуються комбінації різних класичних алгоритмів шифрування, та 
які циклічно повторюються. На вхід кожного наступного раунда подається вихід 
попереднього раунда і ключ. У більшості сучасних блокових алгоритмів симетри-
чного шифрування наявні такі типи операцій:Б  І81.022.18007.248 ПЗ 
− таблична підстановка – група бітів замінюється на іншу групу бітів (Р-блоки); 
− перестановка – біти перемішуються між собою (S-блоки); 
− операція додавання по модулю 2 (логічна операція виключне АБО – XOR); 
− циклічний зсув на певну кількість біт. 
Основними параметрами таких алгоритмів буде їх стійкість, довжина ключа, 
довжина оброблюваного блоку, число раундів [2]. 
 
1.5 Приклади симетричних алгоритмів 
 
В даний час вже існує багато симетричних криптосистем, які є національ-
ними стандартами. Порівняльна характеристика деяких відомих симетричних ал-
горитмів наведена у таблиці 1.2. 
 
 
 
 Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 11 
 
Таблиця 1.2 – Порівняльна характеристика симетричних алгоритмів 
 3DES IDEA Blowfish Twofish AES Калина 
Рік розробки 1978 р. 1991 р. 1993 р. 1998 р. 1998 р. 2014 р. 
Довжина ключа, біт 3∙56 128 до 448 128/192/256 128/192/256 128/192/256  
Розмір блоку, біт 64 64 64 128 128 128/192/256 
Кількість раундів 3∙16 8 16 16 10/12/14 10/12/14 
 
Алгоритм симетричного шифрування 3DES (Triple DES) було розроблено та 
введено для подолання недоліків алгоритму DES (вразливий до атак методом гру-
бої сили). Стандарт DES – довжина блоку шифрування складає 64 біт. Розмір ключа 
також 64 біт. При цьому кожен восьмий біт є службовим і в шифруванні участі не 
бере. Кожен такий біт є двійковою сумою семи попередніх і служить лише для зна-
ходження помилок при передачі ключа по каналу зв’язку [3]. Тому фактично дов-
жина ключа вважається 56 біт, а кількість раундів такого шифру – 16.    
Оновлений алгоритм тричі застосовує цикли DES до кожного блоку даних. 
Можна вважати, що довжина ключа збільшується з 56 до 112 біт; і він вимагає в 
три рази більше часу, ніж звичайний DES [4]. Такий шифр стало набагато важче 
взламати, ніж DES. Він все ще використовується сьогодні, але також вважається 
застарілим алгоритмом шифрування.  
Алгоритм IDEA – це симетричний блоковий алгоритм, який шифрує дані у 
64-бітних блоках за допомогою 128-бітного ключа. Він заснований на змішуванні 
операцій із різних алгебраїчних груп, але має простір слабких ключів. Алгоритм 
Twofish є удосконаленням алгоритму BlowFish, був одним із  фіналістів конкурсу 
AES. Він швидкий при шифруванні, проте має повільне встановлення ключа, а та-
кож має порівняно складну реалізацію, що ускладнює його аналіз. 
Шифрування AES (Advanced Encryption Standard, переможець конкурсу), ві-
доме як Rijndael, використовує блокові шифри 128, 192 або 256 біт для шифрування 
і дешифрування даних, є одним з найбільш відомих і ефективних методів симетри-
чного шифрування, що використовуються сьогодні. AES є щонайменше в шість ра-
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 12 
 
зів швидшим, ніж навіть потрійний DES [5]. Крім того, на відміну від інших пред-
ставлених алгоритмів, AES не використовує мережу Фейстеля (коли блок вхідного 
повідомлення ділять навпіл). 
Калина – це один із алгоритмів симетричного блокового шифрування, що на-
разі широко використовується в Україні. Даний стандарт вважається обов’язковим 
для використання замість радянського стандарту ГОСТ 28147:2009 після 1 січня 
2022 року. Хоча даний алгоритм вважається досить криптостійким, проте він базу-
ється на шифруванні AES. Основні відмінності даних алгоритмів: Калина підтри-
мує розміри блоку даних і ключів до 512 біт, а отже і має більшу кількість раундів 
шифрування, а також має принципово нову схему генерації раундових ключів. 
 
1.6 Висновки 
 
Алгоритми симетричного шифрування широко використовуються в  шифру-
ванні даних, бо мають багато переваг в плані безпеки і швидкості. AES є одним з 
найбільш поширених та популярних алгоритмів шифрування. Він був розроблений 
в якості альтернативи DES і потім став новим стандартом шифрування. Те, що ро-
бить AES унікальним, це його швидкість, безпека і простота реалізації. Зараз він 
використовується в шифруванні мобільних додатків, для передачі зашифрованих 
файлів через мережу Інтернет, в захищених протоколах передачі файлів, таких як 
FTPS і HTTPS, в конфігурації Wi-Fi-мереж. Тому за основу дипломної роботи взя-
тий саме алгоритм симетричного шифрування AES. 
 
 
 
 
 
 
 
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 13 
 
2. ПРИНЦИПИ ПОБУДОВИ АЛГОРИТМУ ШИФРУВАННЯ AES 
 
2.1 Загальна характеристика криптоалгоритму 
 
Алгоритм шифрування AES використовує 128-бітний симетричний або одно-
ключовий блоковий шифр, який шифрує і дешифрує інформацію. Процес шифру-
вання AES створює зашифрований текст, який представляє собою нечитабельне пе-
ретворення даних відкритого тексту, яке фактично не піддається розшифровці. 
Вихідні дані процесу шифрування, зашифрований текст AES, не зможуть бути про-
читані до тих пір, поки секретний ключ AES не буде використаний для його роз-
шифровки. 
При обміні даними з використанням шифрування AES відправнику і одер-
жувачу надається один і той же секретний ключ AES, який використовується для 
перетворення інформації в зашифрований текст, а також в читабельний відкритий 
текст. Якщо ця інформація буде перехоплена хакером, він не зможе прочитати її 
без секретного ключа AES, який повинен бути відомий тільки користувачам, які 
відправляють і отримують зашифровану інформацію. Процеси шифрування і де-
шифрування алгоритму AES можуть використовувати ключі довжиною 128, 192 і 
256 біт для перетворення відкритого тексту в зашифрований текст і зашифрованого 
тексту у відкритий текст.  
Загальні характеристики AES: 
− Для шифрування і розшифрування використовуються 128-бітові блоки да-
них. 
− Дозволяється використовувати три різних довжини ключа – 128,192 або 256 
біт. 
− Від розміру ключа залежить число раундів шифрування: довжина 128 біт – 
10 раундів; довжина 192 біта – 12 раундів; довжина 256 біт –14 раундів. 
− Всі раунди, крім останнього, ідентичні [6]. 
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 14 
 
Алгоритм AES оперує байтами, які інтерпретуються як елементи кінцевого 
поля Галуа GF(28). У цьому полі визначені операції додавання і множення двох еле-
ментів, результатом яких, в свою чергу, також є елемент цього поля. 
AES працює методами підстановки і перестановки. Спочатку незашифровані 
дані перетворюються в блоки, а потім шифрування застосовується з використанням 
ключа. Процес шифрування складається з різних процесів, таких як зсуви рядків, 
змішування стовпців і додавання ключів [7]. 
За оцінками розробників, вже на чотирьох раундах шифрування цей алгоритм 
досить стійкий для сучасних використань. Теоретичною межею вважається 6-8 ра-
ундів. Отже, 10-14 раундів, передбачених у цьому алгоритмі, мають значний запас 
щодо криптостійкості [8]. 
 
2.2 Математичні основи побудови симетиричного криптоалгоритму AES 
Попередньо вхідні дані розбиваються на блоки по 16 байт, а якщо повний 
розмір не кратний 16 байтам, то дані доповнюються до розміру, кратного 16 бай-
там. Блоки представляються у вигляді матриці 4x4, яку називають State. Наприклад, 
якщо є блок даних – in0, in1, … in15, то заповнювати матрицю цими елементами 
потрібно по колонкам (рис. 2.1). 
 
Рис. 2.1 – Формування матриці State 
 
 
 
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 15 
 
Перед першим раундом виконується операція AddRoundKey – додавання за 
модулем 2 (проста порозрядна операція XOR) кожного елемента матриці даних до 
початкового ключа шифру. Далі – (r-1) раундів шифрування (де r – кількість раун-
дів), кожен з яких складається з таких перетворень:  
− SubBytes – підстановка байтів за допомогою таблиці підстановок; 
− ShiftRows – циклічний зсув рядків блоку на різну кількість байтів; 
− MixColumns – змішування даних всередині кожного стовпця блоку; 
− AddRoundKey – додавання ключа. 
Останній раунд складається лише з 3 перетворень: SubBytes, ShiftRows, 
AddRoundKey. 
В алгоритмі AES генеруються раундові ключі на основі ключа шифрування 
за допомогою процедури KeyExpansion. Спочатку вони генеруються з основного 
ключа, кожен раундовий ключ використовується лише один раз в одному раунді. 
Розширений ключ складається з 4(r+1) чотирибайтових слів (wi): 4 слова на основ-
ний ключ і по 4 слова на r раундових ключів. Таким чином, повна довжина розши-
реного ключа для 10 раундів становить 1408 біт (1 слово – 32 біт); для 12 раундів – 
1664 біт; для 14 раундів – 1920 біт. 
При дешифруванні всі перетворення здійснюються в зворотному порядку. 
Використовуються наступні зворотні перетворення замість відповідних при шиф-
руванні: InvSubBytes – підстановка байтів за допомогою зворотної таблиці підста-
новок; InvShiftRows – циклічний зсув рядків; InvMixColumns – змішування даних 
всередині кожного стовпця. Операції KeyExpansion і AddRoundKey залишаються 
незмінними. Раундові ключі використовуються в зворотному порядку. 
Загальна схема алгоритму подана на рис. 2.2. 
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 16 
 
 
Рис. 2.2 – Загальна схема криптоалгоритму AES 
 
2.3 Удосконалення криптоалгоритму AES 
Швидкість виконання процедур шифрування та розшифрування даних за до-
помогою алгоритму AES залежить від розміру ключа, адже в залежності від його 
довжини варіюється і кількість раундів шифрування, і час формування раундових 
ключів. Чим довший ключ – тим більш стійким буде зашифрований текст, і тим 
більше знадобиться часу для його шифрування. Навіть якщо використовувати 
ключі довжиною в 128 біт, при великих обсягах даних буде відчутна затримка в 
часі. Тому існує безліч ефективних апаратних реалізацій для оптимізації AES. 
Проте варто спробувати знайти шляхи покращення і у програмній реалізації без 
втрати криптостійкості шифру.  
 
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 17 
 
Один із шляхів удосконалення алгоритму – цілком переробити принцип ро-
боти з матрицею State. Така матриця має 4 рядки і 4 стовпці, причому заповнення 
даного блоку відбувається по стовпцям. Відповідно, результат шифрування у ви-
гляді матриці State', потрібно також зчитувати по стовпцям, що вимагає додаткових 
обчислень та ініціалізацію цикла. Можна заповнити блок даних у вигляді однови-
мірного масиву, але теж по стовпцям. Тоді масив State буде мати такий принцип 
заповнення (рис. 2.3): 
 
Рис. 2.3 – Заповнення модифікованого масиву State 
 
Оскільки операції MixColumns та AddRoundKey працюють зі стовпцями, за 
такого заповнення модифікація цих перетворень не буде складною. До того ж, тоді 
відпаде необхідність перетворення матриці результату у рядок даних. 
MixColumns – складна процедура змішування колонок, де кожна колонка ма-
триці State перемножується з фіксованим многочленом (детальніше ця операція 
описана при її програмній реалізації).  
Для опрацювання одної колонки потрібно виконати 8 операцій множення для 
шифрування та 16 операцій для дешифрування, тоді тільки для одного раунду – це 
24-64 операції множення на визначені константи. Замість реалізації таких операцій 
множення можна використати попередньо обчислені таблиці для пошуку необхід-
ного значення. Тоді потрібно визначити 6 таких таблиць – дві для процесу шифру-
вання та чотири для процесу розшифрування.  
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 18 
 
Наприклад, запишемо у рядок даних результати множення усіх можливих чи-
сел до 1 байту (256 біт) на {02}. Те ж саме потрібно обрахувати для інших констант 
– {03}, {09}, {0b}, {0d}, {0e} (табл. 2.1). Повністю дані таблиці будуть представлені 
у лістингу програмної реалізації. 
Таблиця 2.1 – Приклад формування допоміжних таблиць для MixColumns 
 
Число, яке потрібно помножити 
00 01 02 03 04 05 06 07 08 09 … 
Результат множення на {02} 00 02 04 06 08 0a 0c 0e 0e 12 … 
Результат множення на {03} 00 03 06 05 0с 0f 0a 09 18 1b … 
А також множення на {09}, {0b}, {0d}, {0e} 
 
SubBytes – це операція заміни байтів, яка працює незалежно від кожного 
байта матриці даних за допомогою таблиці підстановки S-box (рис. 2.4). Наприклад, 
якщо елемент матриці s={53}, то значення підстановки буде визначатися перети-
ном рядка з індексом «5» і стовпця з індексом «3». Значення елементу s перетво-
риться на {ed}.  
 
Рис. 2.4 – Таблиця підстановок для операції SubBytes 
 
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 19 
 
Візуально можна легко розділити значення елементу на дві частини і отри-
мати індекси рядка і стовпця таблиці підстановок. Проте програмна реалізація по-
требує математичних перетворень для визначення окремо першої та другої цифри 
елементу. Для вирішення цієї проблеми можна записати таблицю S-box у вигляді 
одновимірного масиву з 256 елементами. Тоді не потрібно обчислювати індекси 
рядка та стовпця. Наприклад, елемент матриці s={53} стане 5316-тім елементом в 
масиві S-box, і це значення співпадає зі значенням на перетині рядка з індексом «5» 
і стовпця з індексом «3». 
ShiftRows – це операція впорядкування елементів матриці State, яка виконує 
циклічний зсув кожного рядка. Довжина циклічного зсуву в кожному рядку різна. 
Нульовий рядок залишається без змін, у першому рядку кожен елемент зсувається 
на одну позицію ліворуч, елементи другого і третього рядка зміщуються на дві та 
три позиції відповідно.  Зокрема, перетворення ShiftRows відбувається наступним 
чином: елемент r-того рядка S'r,c=Sr,(c+shift)mod4, де значення зсуву shift залежить від 
номеру рядка. Наприклад, перший елемент другого рядка повинен стати третім еле-
ментом у новій матриці State', другий елемент – четвертим і т.д. 
Дане перетворення працює з рядками, а оновлений блок даних State має лише 
один, причому елементи одного рядка зі звичайної матриці розкидані по всьому 
масиву. Отже, необхідно знайти зручний і швидкий спосіб реалізації циклічного 
зсуву. Для кожного елементу такого блоку можна створити таблицю індексів. Така 
таблиця буде вказувати, куди повинен переміститися кожний елемент. Наприклад, 
якщо нульовий рядок не зміниться, отже 0-ий, 5-ий, 9-ий і 13-ий елементи повинні 
так і залишитися на 0-ій, 5-ій, 9-ій і 13-ій позиції відповідно. Вирахуємо індекси 
інших елементів та занесемо їх в таблицю (табл. 2.2). 
Таблиця 2.2 – Зіставлення елементів в операції ShiftRows 
Нове значення індексу 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 
Старе значення індексу 0 5 10 15 4 9 14 3 8 13 2 7 12 1 6 11 
 
 
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 20 
 
Відповідно і для інверсного перетворення InvShiftRows також потрібно ство-
рити таку таблицю (табл. 2.3). 
Таблиця 2.3 – Зіставлення елементів в операції InvShiftRows 
Нове значення індексу 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 
Старе значення індексу 0 13 10 7 4 1 14 11 8 5 2 15 12 9 6 3 
 
Крім модифікацій окремих раундових перетворень, можна прискорити вико-
нання шифрування шляхом їх об’єднання. Наприклад, якщо об’єднати дві операції, 
які мають схожі цикли у програмному коді, то він буде проходити вдвічі менше 
ітерацій циклів, що значно скоротить час обробки тексту. Отже, при практичній 
реалізації оптимізованого алгоритму, потрібно за можливості об’єднати операції, 
які мають схожий принцип опрацювання елементів. 
Отже, загальні принципи оптимізації наступні: 
− усі двовимірні масиви перетворюються на одновимірні; 
− додаються допоміжні таблиці для операцій ShiftRows та MixColumns; 
− об’єднуються операції зі схожим принципом опрацювання елементів. 
Тепер можна представити спрощену схему оптимізованого криптоалгоритму 
AES (рис. 2.5). Дешифрування має схожий принцип. 
 
Рис. 2.5 – Спрощена схема оптимізованого алгоритму 
 Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 21 
 
2.4 Висновки 
Стандарт допускає тільки одне значення довжини блоку вхідних даних – 128 
біт для 3 версій алгоритму AES. У той час як розмір ключа в різних версіях 
відрізняється: AES-128 використовує 128-бітний розмір основного ключа та скла-
дається з 10 раундів, AES-192 – 192-бітний ключ і складається з 12 раундів, а AES-
256 – 256-бітний ключ 14 раундів шифрування. Більша кількість раундів робить 
шифрування складніше. Таким чином, AES-256 буде найбільш безпечним шифром. 
Однак слід зауважити, що чим довше ключ і більше раундів, тим вища вимога до 
продуктивності. 
Зважаючи на структуру алгоритму та процедури перетворення даних, в про-
грамній реалізації необхідно створити функції таких операцій: SubBytes, ShiftRows, 
MixColumns, AddRoundKey для шифрування та InvSubBytes, InvMixColumns, 
InvShiftRows для дешифрування. Також необхідно згенерувати раундові ключі за 
допомогою операції KeyExpansion та реалізувати зручний вибір довжини ключа. В 
оптимізованій версії алгоритму необхідно об’єднати деякі операції та визначити 
таблиці для операцій MixColumns/InvMixColumns та ShiftRows/InvShiftRows. 
 
 
 
 
 
 
 
 
 
 
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 22 
 
3. ПРАКТИЧНА РЕАЛІЗАЦІЯ КРИПТОАЛГОРИТМУ AES 
3.1 Вибір середовища та мови програмування 
Існує безліч мов програмування, які зараз широко використовуються, проте 
кожна має свої особливості. Для програмної реалізації криптоалгоритму AES було 
обрано одну із найбільш популярних безкоштовних мов програмування з відкри-
тим вихідним кодом – Python.  
− Вона має простий синтаксис, аналогічний англійській мові, що облегшує чи-
тання та розуміння його коду. Крім того,  
− вимагає відносно меншої кількості рядків коду для виконання тих самих опе-
рацій та завдань, що й у інших мовах програмування з великими блоками 
коду. 
− не залежить від платформи, тобто він може працювати на будь-якій опера-
ційній машині, системі або платформі.  
− має велику кількість сторонніх пакетів та фреймворків та розширену станда-
ртну бібліотеку, де можна знайти всі необхідні функції для виконання будь-
якого завдання.  
− має широку спільноту розробників та програмістів, яка допомагає підтриму-
вати Python. 
− має інтеграцію з іншими мовами програмування. 
Python має інтегроване середовище розробки (IDLE), що за замовчуванням 
поставляється разом з дистрибутивом для Windows. Даний редактор коду викори-
стовує автозаповнення та інтелектуальний відступ, а також підсвічування синтак-
сису, що полегшує читання коду та покращує його візуальне представлення. Тому 
у роботі будуть наявні скріншоти фрагементів коду саме цього середовища. 
Для програмної реалізації знадобиться декілька допоміжних модулів –  PyQt5 
– для графічного інтерфейсу; Base64 – для кодування та представлення читабель-
них даних; datetime – для вимірювання часу роботи програми; secrets – для генерації 
ключа. 
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 23 
 
3.2 Програмна реалізація криптоалгоритму AES 
3.2.1 Реалізація процесу шифрування 
Для початку складемо блок-схему програмного коду процесу шифрування 
(рис. 3.1). Дана блок-схема відображає принцип роботи криптоалгоритму, що дає 
повне розуміння процесу шифрування, його етапи та структуру програмної реалі-
зації. 
 
Рис. 3.1 – Блок-схема процесу шифрування 
 
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 24 
 
Спочатку користувач вводить своє повідомлення. Далі воно розбивається на 
блоки по 16 байт (рис. 3.2).  
 
Рис. 3.2 – Алгоритм розбиття тексту на блоки 
 
Після цього заповнюється масив State вхідними значеннями першого блоку 
по колонках. State – проміжний результат шифрування, який представлений як пря-
мокутний масив із 16 байтів, який має 4 рядки і 4 колонки. При цьому необхідно 
передбачити ситуацію, коли довжина останнього блоку вхідних даних виявиться 
менше 16 байт, тоді потрібно буде його доповнити додатковими елементами, які 
рідко використовуються у повідомленнях, щоб при розшифруванні можна було їх 
видалити (рис. 3.3). 
 
Рис. 3.3 – Заповнення та доповнення матриці State 
 
Перетворення SubBytes являє собою заміну кожного байта з State на відпо-
відний йому з константної таблиці Sbox. Ця таблиця отримана за допомогою пере-
творень поля GF (28). Значення елементів Sbox представлені в шістнадцятковій си-
стемі числення (див. рис. 2.2). Занесемо цю таблицю в код у якості двовимірного 
масиву та напишемо функцію SubBytes. Кожен байт із State представляємо як {xy} 
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 25 
 
у шістнадцятковій системі числення. Тепер будемо замінювати його на елемент, що 
стоїть на перетині рядка x та стовпця y (рис. 3.4).  
 
Рис. 3.4 – Функція SubBytes 
 
Найпростіше перетворення – ShiftRows. Ця операція виконує циклічний зсув 
вліво на 1 елемент для першого рядка, на 2 для другого і на 3 для третього. При 
цьому нульовий рядок не змінюється. Зокрема, перетворення ShiftRows() відбува-
ється наступним чином: елемент r-того рядка S'r,c=Sr,(c+shift)mod4, де значення зсуву 
shift залежить від номеру рядка. Наприклад, перший елемент другого рядка пови-
нен стати третім елементом у новій матриці State', другий елемент – четвертим і т.д. 
Оскільки номер рядка і значення зсуву співпадають, використаємо для їх позна-
чення константу shift та напишемо функцію shift_rows (рис. 3.5). 
 
Рис. 3.5 – Функція ShiftRows 
 
При операції MixColumns кожна колонка в State представляється у вигляді 
многочлена і перемножується в полі GF (28) з фіксованим многочленом. Він має 
еквівалентний матричний запис, з яким ми і будемо працювати (3.1).  
⎡����′0⎤ 02 03 01 01 ����0
⎢����′1⎥ 01 02 03 01 ����1
����′ = �01 01 02 03� ����� �                                 (3.1) 
⎢ 2⎥ 2
⎣����′3⎦ 03 01 01 02 ����3
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 26 
 
Але якщо множення на {01} не змінює числа, то множення на {02} прово-
диться за певним правилом. Якщо значення менше {80}, воно зсувається вліво на  
1 біт. Якщо ж значення більше або дорівнює {80}, воно спочатку зсувається вліво 
на 1 біт, а потім до результату зсуву застосовується операція XOR із значенням 
{1b}. Результат може перескочити за значення {ff}, тобто за максимальне значення 
одного байта. В цьому випадку потрібно повернути залишок від ділення результату 
на {100} (25610). Множення на інші константи можна виразити за допомогою двох 
попередніх, наприклад, {03} можна представити як {02}+{01}. Оскільки таких об-
числень буде багато, краще створити функції множення числа на певну константу 
(рис.3.6). 
 
Рис. 3.6 – Функції множення на {02} та {03} 
 
При множенні матриць, значення першого елемента нової матриці виходить 
як сума добутків відповідних елементів i-го рядка першої матриці і j-ого стовпця 
другої матриці. Тепер можна написати функцію MixColumns (рис. 3.7). 
 
Рис. 3.7 – Функція MixColumns 
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 27 
 
Операція AddRoundKey представляє собою побітове додавання XOR кож-
ного елемента з State з відповідним елементом з RoundKey (рис.3.8).  
 
Рис. 3.8 – Функція AddRoundKey 
 
RoundKey – масив такого ж розміру, як і State, який будується різним для 
кожного раунду на основі секретного ключа функцією KeyExpansion. Ця допо-
міжна операція є найоб'ємнішою та найскладнішою. Звичайно, користувач може 
сам вводити новий ключ кожний раунд, але запам’ятовувати або записувати роз-
ширений ключ буде складно та незручно. 
Отже, шифроключ має складатися з 4*k елементів, де k – довжина ключа у 
словах. Перший раундовий ключ заповнюється на основі секретного ключа – К0.  
Перші чотири байти стають w0; наступні чотири байти стають w1 і так далі. Якщо 
довжина ключа виявиться меншою за потрібну, потрібно буде його доповнити (рис. 
3.9). 
 
Рис. 3.9 – Доповнення та заповнення першого раундового ключа 
 
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 28 
 
Алгоритм заповнення розширеного ключа наступний. На кожній ітерації пра-
цюємо з колонкою таблиці. Колонки 0...(k-1) вже попередньо заповнені значеннями 
з секретного ключа. Тому починаємо з колонки під номером k. Якщо номер коло-
нки кратний довжині ключа (тобто кожна k-та), то беремо попередню колонку (Wi-
1), виконуємо над нею циклічний зсув вліво на один елемент. Тобто колонка слова 
(Wi-1), яка має елементи [s0,s1,s2,s3], стане словом з елементами [s1,s2,s3,s0]. Потім всі 
байти цієї колонки замінюємо відповідними з таблиці Sbox (та ж таблиця, що ви-
користовується при операції SubBytes). Далі виконуємо операцію XOR між колон-
кою Wi-4, зміненою колонкою Wi-1 і колонкою Rcon(i/k)-1. Rcon – це визначена конс-
тантна таблиця. Для всіх інших колонок потрібно виконати операцію XOR між Wi-
4 і Wi-1. Тобто результат колонки Wi буде залежати від попередньої та k-тої від неї 
колонки в бік початку (рис. 3.10). 
 
Рис. 3.10 – Заповнення розширеного ключа 
 
Тепер з таким набором допоміжних функцій можна написати основну функ-
цію шифрування (рис. 3.11).  
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 29 
 
 
Рис. 3.11 – Функція шифрування 
 
3.2.2 Реалізація процесу дешифрування 
Процес дешифрування дещо схожий з процесов шифрування. Спочатку, як і 
при шифруванні, з масиву вхідних байтів формується таблиця State. Потім над нею 
в кожному раунді здійснюються перетворення, після яких повинен сформуватися 
розшифрований текст. Порядок операцій дещо змінюється (див. рис. 2.1). Наспра-
вді не важливо, яка операція буде першою, InvSubBytes чи InvShiftRows, тому що 
одна з них працює зі значеннями байтів, а друга їх переставляє, не змінюючи цих 
значень. 
Всі інверсні операції будуть дуже схожі на свої прямі аналоги. Тому можна 
не виділяти під них окремих функцій, тим самим скоротивши обсяг програмного 
коду, а модифікувати існуючі. Кожна функція, що описує трансформацію, матиме 
вхідну змінну inv. Якщо вона дорівнює 0, то функція буде працювати у звичайному 
або прямому режимі (шифрування), якщо 1 – в інверсному (дешифрування). 
Складемо блок-схему програмного коду процесу дешифрування (рис. 3.12). 
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 30 
 
 
Рис. 3.12 – Блок-схема процесу дешифрування 
 
InvShiftRows здійснює циклічний зсув вже вправо на 1 елемент для першого 
рядка State, на 2 для другого і на 3 для третього. Нульовий рядок знову не зміню-
ється. Принцип залишається той самий, але елемент S'r,c=Sr,(c-shift)mod4. Наприклад, 
третій елемент другого рядка повинен стати знову першим елементом у новій мат-
риці State', четвертий елемент – другим і т.д. Модифікуємо функцію ShiftRows, вка-
завши, що при нульовій інверсії потрібно виконувати циклічний зсув вліво, а при 
одиничній – зсув вправо (рис. 3.13) . 
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 31 
 
 
Рис. 3.13 – Функція ShiftRows та InvShiftRows 
 
InvSubBytes працює точно так же, як і SubBytes, за винятком того, що заміни 
робляться з константної таблиці InvSbox. Отже, модифікуємо функцію SubBytes, 
вказавши, з якої таблиці брати заміни (рис. 3.14). 
 
Рис. 3.14 – Функція SubBytes та InvSubBytes  
 
Принцип операцій InvMixColumns той самий, але кожна колонка State пере-
множується з іншим визначеним многочленом. У матричній формі це виглядає так 
(3.2): 
⎡����′0 0���� 0���� 0���� 09 ����0
⎢����′
⎤
1⎥ 09 0���� 0���� 0���� ����1
⎢����′
= �0���� 09 0���� 0����� ����� �                                   (3.2) 
2⎥ 2
⎣����′3⎦ 0���� 0���� 09 0���� ����3
Множення на ці константи можна виразити за допомогою {02} та {01}. На-
приклад, {09} можна представити як {02}*{02}*{02}+{01}, {0b} як 
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 32 
 
{02}*{02}*{02}+{02}+{01}. Знову створимо функції множення числа на певну 
константу (рис. 3.15). 
 
Рис. 3.15 – Функції множення на {09}, {0b}, {0d} та {0e} 
 
Тепер модифікуємо функцію MixColumns. При нульовій інверсії будемо ви-
користовувати прямі константи (рис. 3.16), а при одиничній – інверсні (рис. 3.17). 
 
Рис. 3.17 – Операція MixColumns та InvMixColumns 
 
Операція AddRoundKey оборотна сама собі в силу властивості операції XOR. 
Тому ніяких змін в неї вносити не потрібно. Варто зазначити, що послідовність до- 
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 33 
 
давання раундових ключів в AddRoundKey повинна бути зворотною: від r+1 до 0. 
Враховуючи це, напишемо функцію дешифрування (рис. 3.18).  
 
Рис. 3.18 – Функція дешифрування 
 
3.3 Програмна реалізація удосконаленого криптоалгоритму AES 
Спочатку перетворимо матрицю State в один рядок, заповнюючи його по ко-
лонках. Після цього необхідно переробити всі функції, щоб вони працювали не з 
матрицею, а з масивом даних.  
Почнемо з модифікації перетворення MixColumns. Як вже було зазначено, 
можна скористатися попередньо обчисленими значеннями результату множення 
усіх можливих елементів на константу. Тоді залишається лише знайти в таблиці 
потрібне число. Значення елементу масиву State і буде індексом, за яким потрібно 
шукати елемент у визначених таблицях для MixColumns. А оскільки дане перетво-
рення має пройти 4 ітерації, як і перетворення AddRoundKey, можна їх об’єднати в 
одну функцію. Проте варто зазначити, що при шифруванні спочатку виконується 
операція MixColumns, а потім AddRoundKey, а при дешифруванні – навпаки. До 
того ж, в останньому раунді не можна змішувати колонки, для забезпечення роз-
шифрування тексту, тому хорошим рішенням є залишити функцію 
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 34 
 
AddRoundKey, яка буде застосовуватися лише в останньому раунді шифрування. 
Така реалізація дає змогу позбавитися 36-48 (в залежності від кількості раундів) 
ітерацій проходження циклів. Отже, напишемо оновлену функцію, яку назвемо 
mix_add (рис. 3.19). 
 
Рис. 3.19 – Об’єднана функція MixColumns та AddRoundKey 
 
Тепер оптимізуємо перетворення SubBytes. Ідея заключається в тому, щоб за-
писати таблиці констант Sbox та InvSbox у вигляді великого одновимірного масиву, 
замість двовимірного. Таким чином, нам не потрібно знаходити окремо першу та 
другу цифру елементу матриці State, для пошуку відповідного елементу з таблиці 
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 35 
 
Sbox/InvSbox на перетині потрібного рядка та стовпця. Адже це досягається шля-
хом цілочисельного ділення та одержанням остачі від цілочисельного ділення. Тоді 
програма, наприклад, буде відразу шукати 83 елемент в таблиці констант. І хоча 
пошук такого елемента вручну здається трудомістким процесом, програмна реалі-
зація позбавиться щонайменше 32 операцій ділення за один раунд шифрування та 
22-30 (в залежності від кількості раундів)  операцій під час процесу розширення 
ключа.  
 Для ShiftRows потрібно занести в програмний код два масива з визначеними 
індексами. Об’єднаємо змінені операції ShiftRows та SubBytes у одну функцію. Це 
дозволить зменшити кількість циклів у обох операціях; програмна реалізація зага-
лом позбавиться 160-224 (в залежності від кількості раундів) ітерацій проходження 
циклу. Тобто, завдяки такому об’єднанню, замість 32 ітерацій за раунд вже будемо 
використовувати 16. Напишемо оновлену функцію, яку назвемо sh_sub (рис. 3.20). 
 
Рис. 3.20 – Об’єднана функція SubBytes та ShiftRows 
 
3.4 Розробка графічного інтерфейсу та тестування програми 
 
Для розробки графічного інтерфейсу програми можна скористатися спеціа-
льним середовищем Qt Designer, яке підтримує бібліотеку PyQt5. Додамо до голо-
вного вікна програми всі необхідні об’єкти: поля для вводу тексту, кнопки, допо-
міжний текст для користувача (рис. 3.21). 
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 36 
 
 
Рис. 3.21 – Головне вікно програми 
 
Тепер можна зберегти файл і конвертувати його в Python-файл. Для цього 
достатньо використати команду pyuic5 із терміналу комп’ютера. Отримано програ-
мний код, з яким можна працювати.  
Оскільки реалізовано вибір довжини ключа, за що відповідають радіо-кно-
пки, потрібно зчитати з них значення.  Але спочатку встановимо кнопку «128-bit» 
активною за замовчуванням, щоб користувач знав, який саме стандарт шифрування 
використовується, якщо він цього не обрав. При ключі в 128 біт (4 cлова), кількість 
раундів дорівнює 10, при ключі в 192 біти (6 слів) – 12 раундів, а при ключі в 256 
біт (8 слів) – 14 раундів.  Щоб постійно отримувати поточні значення обраної дов-
жини ключа, краще реалізувати зчитування параметрів у вигляді функції (рис. 
3.22).  
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 37 
 
  
Рис. 3.22 – Функція отримання параметрів довжини ключа 
 
Кожній кнопці потрібно призначити дію, а також передбачити зчитування ін-
формації, введеної користувачем у текстові поля. Для цього створимо функцію 
add_functions. Вона передає ключ та текст в основну функцію шифрування/дешиф-
рування (crypt). Якщо користувач натискає кнопку «Encrypt», то ця функція також 
передає нульове значення інверсії, якщо «Decrypt» – одиничне. Також додамо фу-
нкції і для інших кнопок (browsefiles, savefiles та generatekey), які потім реалізуємо 
(рис. 3.23). 
 
Рис. 3.23 – Функція натискання на кнопки 
 
Кнопка «Generate key» відповідає за генерування випадкового ключа, що зна-
чно полегшує роботу користувачеві, адже йому не потрібно вигадувати стійкий 
ключ з потрібною кількістю символів. Проте можна і не користуватися цією кноп-
кою і ввести бажане значення ключа. Для генерації випадкового рядка будемо 
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 38 
 
користуватися модулем secrets, який є значно безпечнішим за модуль random, і ви-
користовується для генерації криптографічно стійких випадкових чисел, які підхо-
дять для управління такими даними, як паролі, автентифікація облікового запису, 
токени безпеки. Токени даного модуля мають достатню випадковість, щоб бути за-
хищеним від атак грубої сили. Отже, напишемо функцію генерації секретного 
ключа (рис. 3.24). 
 
Рис. 3.24 – Функція генерації секретного ключа 
 
Кнопка «Open file» відповідає за відкриття текстового файлу через провідник 
Windows, що дозволить користувачу зручно обирати й завантажувати файл з будь-
якої папки. Варто не тільки відкрити файл, який було обрано, та вивести його вміст 
у віконце для введення тексту, а й передбачити виникнення помилок. Наприклад, 
якщо користувач вирішить не обирати файл, а просто закрити діалогове вікно, про-
грама не зможе відкрити файл за пустим шляхом і закінчить свою роботу. Тепер 
створюємо функцію вибору і зчитування файлу (рис. 3.25). 
 
Рис. 3.25 – Функція відкриття файлу 
 
 Кнопка «Save result» має схожу функцію з попередньою кнопкою – відповдає 
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 39 
 
за збереження результату шифрування чи дешифрування. Після запуску програми 
кнопка буде неактивною, адже ще нічого не відбулося. В кінці функції, що відпо-
відає за криптографічне перетворення тексту, додамо команду розблокування кно-
пки для збереження результату. Для зручності дозволимо зберігати файл також че-
рез провідник Windows, щоб користувач сам зміг вказати нову назву файлу, чи за-
мінити оригінальний. Може виникнути проблема, коли користувач захоче замінити 
файл з відкритим текстом на зашифрований, і випадково зітре чи згенерує ключ. 
Тоді вже неможливо буде відновити оригінал файлу. Тому краще автоматично збе-
регти і файл зі значенням ключа, наприклад, з назвою «key.txt». Створимо функцію 
збереження файлів (рис. 3.26). 
 
Рис. 3.26 – Функція збереження тексту та ключа 
 
Щоб можна було працювати із символами кирилиці (числове значення яких 
перебільшує розмір 1 байта), будемо використовувати кодування UTF-8, яке відо-
бразить байтові представлення елемента, і коди цих символів відповідатимуть їх 
кодам ASCII. А щоб уникнути виведенню на екран незрозумілих символів, коли 
будемо повертати символи за їх числовим кодом, можна використати Base64 – ста-
ндарт кодування двійкових даних лише за допомогою 64 символів ASCII. Кожні 3 
вихідні байти кодуються 4 символами. Спробуємо вивести результат шифрування, 
використовуючи кодування Base64. А при дешифруванні навпаки – спробуємо де-
кодувати із Base64 вхідний текст. 
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 40 
 
Окрім цього, при дешифруванні необхідно передбачити видалення додатко-
вих символів, які використовувались для доповнення блоку вхідних даних. Щоб не 
перебирати кожну літеру вихідного результату, видалення елементів слід починати 
з кінця.  
Залишилось зібрати всі функції та правильно прописати їх виклик. Тепер мо-
жна запустити програму та перевірити натискання усіх кнопок. Перевіряємо, як 
працює шифрування та розшифрування тексту. Відкриваємо файл, дописуємо вла-
сний текст та генеруємо випадковий ключ (рис. 3.27).  
 
Рис. 3.27 – Введення початкових даних 
 
 Проводимо операції шифрування (рис. 3.27) та розшифрування (рис. 3.28). 
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 41 
 
 
Рис. 3.28 – Зашифрований текст 
 
Рис. 3.29 – Розшифрований текст 
 
Провівши ще декілька таких операцій, можна точно сказати, що програма 
працює правильно. При дешифруванні ми отримаємо такий же текст, що і перед 
шифруванням. Результат шифрування є результатом r раундів алгоритму AES, та 
всі перетворення AddRoundKey, SubBytes, MixColumns та ShiftRows працюють дій-
сно, як і потрібно, навіть після модифікацій даних перетворень. Це можна переві-
рити за допомогою сервісів онлайн-шифрування. Отже, програма правильно пра-
цює в обох напрямках. Її лістинг наведено в додатку А. 
 
3.5 Порівняльний аналіз практичної реалізації криптоалгоритмів AES 
Після успішної програмної реалізації двох версій алгоритму (звичайної та 
удосконаленої), необхідно порівняти час, який потрібен для шифрування та деши-
фрування, щоб визначити ступінь оптимізації криптоалгоритму. Оскільки стандарт 
підтримує три довжини ключа – 128 біт, 192 біт та 256 біт – для отримання кращої 
порівняльної характеристики варто провести досліди для цих трьох випадків. За 
основу візьмемо 5 текстових файлів різного розміру – 1 кБ, 10 кБ, 50 кБ, 100 кБ та 
200 кБ. Такі числа дозволять легко оцінити залежність потрібного часу від довжини 
повідомлення.  
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 42 
 
Складемо порівняльну таблицю часу шифрування (табл. 3.1) та розшифру-
вання (табл. 3.2) криптоалгоритмів. Колонка «До» містить час шифрування для зви-
чайної реалізації шифру, колонка «Після» - після його удосконалення.  Колонка 
«%» має розрахований відсоток економії часу, необхідного для обробки файлу, за-
вдяки оптимізації. 
Таблиця 3.1 – Результати оптимізації алгоритму: шифрування 
Шифрування 
 AES-128 AES-192 AES-256 
Розмір До Після % До Після % До Після % 
даних 
1 кБ 0,022с 0,011с 50% 0,027с 0,013с 52% 0,03с 0,014с 53% 
10 кБ 0,23с 0,12с 48% 0,27с 0,13с 52% 0,3с 0,15с 50% 
50 кБ 1,43с 0,86с 40% 1,61с 0,95с 41% 1,78с 1,01с 43% 
100 кБ 3,57с 2,42с 33% 3,93с 2,59с 34% 4,32с 2,75с 36% 
200 кБ 9,74с 7,52с 23% 10,48с 7,68с 27% 10,9с 7,85с 28% 
 
Таблиця 3.2 – Результати оптимізації алгоритму: дешифрування  
Дешифрування 
 AES-128 AES-192 AES-256 
Розмір До Після % До Після % До Після % 
даних 
1 кБ 0,05с 0,012с 76% 0,06с 0,015с 75% 0,07с 0,016с 77% 
10 кБ 0,52с 0,13с 75% 0,62с 0,15с 76% 0,72с 0,17с 76% 
50 кБ 2,87с 0,93с 68% 3,37с 1,06с 69% 3,89с 1,09с 72% 
100 кБ 6,45с 2,51с 61% 7,43с 2,73с 63% 8,48с 2,93с 65% 
200 кБ 15,53с 7,74с 50% 17,35с 7,89с 55% 19,31с 8,19с 58% 
 
 Отже, як бачимо з таблиці, дешифрування у звичайному криптоалгоритмі 
займає майже вдвічі більше часу, ніж шифрування. Очевидно, це пов’язане з біль-
шою кількістю та складністю операцій множення перетворення InvMixColumns. 
Тому удосконалення саме цієї функції вагомо покращує показники. В цілому, усі 
незначні модифікації в сукупності дають непоганий результат оптимізації як про-
цесу шифрування, так і процесу дешифрування. 
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 43 
 
 Оскільки для різної довжини ключа значення часу обробки даних дуже схожі, 
можна взяти середні показники (а саме для середньої довжини ключа – 192 біт) для 
формування графіків порівняння необхідного часу для шифрування (рис. 3.30) та 
для дешифрування (рис. 3.31) реалізованих криптоалгоритмів. 
12
10
8
6
4
2
0
1 10 50 100 200
Розмір файлу, кБ
AES Оптимізований AES
 
Рис. 3.30 – Графік часу шифрування алгоритмів 
 
20
18
16
14
12
10
8
6
4
2
0
1 10 50 100 200
Розмір файлу, кБ
AES Оптимізований AES  
Рис. 3.31 – Графік часу дешифрування алгоритмів 
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 44 
 
Час виконання, с Час виконання, с
3.6 Висновки 
 
Практична реалізація криптоалгоритму AES має успішно реалізовані опера-
ції SubBytes, ShiftRows, MixColumns, AddRoundKey для шифрування,  InvSubBytes, 
InvMixColumns, InvShiftRows для дешифрування та генерування раундових ключів 
за допомогою операції KeyExpansion. Дану реалізацію, яка  базувалась на офіційній 
специфікації стандарту шифрування, було вдосконалено шляхом її оптимізації з 
умовою збереження криптостійкості шифру. Покращена реалізація займає більше 
пам’яті для зберігання допоміжних таблиць функцій MixColumns та ShiftRows, 
проте показує гарний відсоток оптимізації – до 50% при шифруванні та до 75% при 
дешифруванні даних. 
Даний удосконалений алгоритм є основою програмного засобу для шифру-
вання даних із графічним інтерфейсом та зручними функціями для користувача – 
відкриття чи збереження файлу, генерація ключа необхідної довжини. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 45 
 
РОЗДІЛ 4. ОХОРОНА ПРАЦІ 
4.1. Аналіз небезпек та шкідливостей, які впливають на працівників офісного 
приміщення 
 
Результатом дипломної роботи є практична реалізація криптоалгоритму AES, 
представлена у вигляді повноцінного додатка з графічним інтерфейсом. Особливі-
стю даної практичної реалізації алгоритму є його удосконалення для зменшення 
часу обробки даних, що розширює сфери його застосування як для комерційного, 
так і загальнодоступного використання. Отже, таке програмне забезпечення може 
застосовуватись як вдома, так і на підприємствах для захисту конфіденційної інфо-
рмації. Даний додаток може розроблятися та використовуватися для шифрування 
важливої інформації компанії під час роботи відділу інформаційних технологій в 
офісному приміщенні. Для заданого приміщення слід проаналізувати всі наявні не-
безпеки та шкідливості, які можуть впливати на працівників.  
Неергономічна організація робочого місця, а саме недостатні розміри та га-
барити, неправильна ергономіка робочого місця впливають на робочу позу та ста-
туру. Сюди відносяться висота робочої поверхні, розміри простору для ніг, харак-
теристики робочого крісла, вимоги до поверхні робочого столу, регульованість еле-
ментів робочого місця. Крім того, така довгочасна сидяча робота може спровоку-
вати біль у шиї, плечах, спині та призвести до викривлення хребта. 
Вимоги до організації і обладнання робочого місця встановлюють ДСН 
3.3.2.007-98. Параметри робочого місця мають становити: 
1) Площа робочого місця – не менше ніж 6,0 м2, об'єм – не менше ніж 20,0 м3 
2) Висота робочої поверхні – в межах 680...800 мм, рекомендовані розміри ши-
рини 600...1400 мм,  глибини –800..1000 мм.  
3) Простір для ніг заввишки – не менше ніж 600 мм, завширшки – не менше ніж 
500 мм, завглибшки (на рівні колін) – не менше ніж 450 мм. 
4) Висота поверхні сидіння – в межах 400...500 мм, а ширина і глибина – не 
менше ніж 400 мм. 
 Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 46 
 
5) Висота спинки стільця – близько 300 мм, ширина – не менше ніж 380 мм 
Визначимо розміри даного офісного приміщення: довжина (а) = 20 м; ширина 
(b) = 10 м; висота (h) = 3,5 м. Тоді площа приміщення S = 200 м2, об’єм приміщення 
V = 700 м3. Приміщення містить 14 робочих місць загальною площею 140 м2 та 
зону відпочинку площею 40 м2. В цілому на одного працівника фактичне значення 
площі становить 10 м2, а об’єм – 30,5 м3, що цілком забезпечує гігієнічним вимогам. 
Фактичні параметри розмірів робочого місця наступні: 
− висота робочої поверхні – 800 мм, ширина – 1200 мм, глибина – 700 мм; 
− висота простору для ніг – 750  мм, ширина – 750 мм, глибина – 650 мм; 
− висота поверхні сидіння – 450 мм (конструкція дозволяє регулювати висоту), 
ширина 400 мм, глибина – 400 мм. 
− висота спинки стільця – 450 мм, ширина – 400 мм. 
Отже, єдиним параметром, який не відповідає оптимальним розмірам – гли-
бина робочої поверхні. Даний параметр компенсується наявністю додаткових тумб 
для зберігання документів. Всі інші фактичні значення відповідають нормативним 
вимогам. 
Освітленість робочого місця. Робота, яка передбачає довгочасну працю за пе-
рсональним комп’ютером, призводить до перенапруження зору, що може викли-
кати головний біль, сухість і почервоніння очей. Нестача освітлення ще більше по-
гіршує ситуацію – крім шкідливого впливу на зорові аналізатори, знижує продук-
тивність праці, підвищує рівень втоми та травматизму. Крім того, надмірно яскраве 
освітлення викликає засліплення, роздратування і різь в очах. 
Освітленість приміщень та робочих місць нормується за ДБН В.2.5-28-2018 
«Природне і штучне освітлення». Нормовані значення освітлення залежать від ро-
зряду зорової праці.  Екран комп’ютера має розташовуватися на відстані від очей 
користувача не ближче ніж за 600 мм. Тому зорова робота за комп’ютером в офісі 
за відстані від очей до об’єкту розрізнення більше 500 мм відноситься до розряду 
високої точності Б-1.  
Система природнього освітлення представлена 4 віконними отворами у зов- 
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 47 
 
нішній боковій стіні розмірами 2,45 м на 2,42 м та загальною площею 23,71 м2 
(площа одного отвору – 5,93 м2). Нормативне значення коефіцієнту природнього 
освітлення (КПО) для офісів при боковому освітленні становить 1%. Фактичне зна-
чення КПО становить 1,06%, що задовольняє допустиме значення. 
Нормативне значення освітленості робочої поверхні при загальному штуч-
ному освітленні становить 300 лк. При роботі з документами значення може дося-
гати 400 лк, адже змінюється відстань від очей працівника до об’єкту розрізнення 
(документу). Фактичне значення освітленості робочої поверхні становить 270 лк, 
що не задовольняє нормативним вимогам та потребує подальшої модифікації сис-
теми штучного освітлення. 
Електричний струм. Оскільки офісне приміщення має електропроводи та ка-
белі для функціонування устаткування (світильники, персональні комп’ютери, пе-
риферійні пристрої), електророзетки, питання електробезпеки є надзвичайно акту-
альним. Пряма взаємодія людини може привести до електричного удару, опіку, ме-
ханічного ушкодження. Ступінь тяжкості наслідків вже буде залежати від величини 
напруги, тривалості то способу взаємодії з джерелом струму. 
Захисні заходи щодо електробезпеки встановлює ДСТУ Б В.2.5-82 2016. Вся 
наявна техніка має захисне заземлення, виконання якого відповідає ДНАОП 0.00-
1.32-01 «Правила будови електроустановок». Електромережа прихованого типу 
має правильний розподіл за призначенням (освітлення — цодна група, робоча зона 
— інша). Приміщення має аварійний резервний вимикач, який може повністю ви-
мкнути електричне живлення, крім освітлення. 
Пожежна безпека. Даний фактор тісно пов’язаний з попереднім, адже поши-
рені причини пожежі в офісі – несправність електропроводки, неполадки електро-
приладів, перегрів апаратури, коротке замикання чи удар блискавки. Крім цього, 
це також і самі працівники та їх недбале ставлення до використання техніки, пере-
вантаження подовжувачів та розеток. 
Для правильного планування та успішного проведення заходів пожежної 
профілактики вагоме значення має оцінка об'єктів щодо їх вибухопожежонебез-
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 48 
 
пеки. Відповідно до ДСТУ Б В.1.1-36:2016 дане приміщення відноситься до кате-
горії В – пожежонебезпечне. В ньому можуть виникнути такі види пожеж: класу А 
(горіння твердих речовин) та класу Е (горіння електрообладнання). 
Попри обладнання будівель будь-якими типами установок пожежогасіння, 
пожежної сигналізації або внутрішніми пожежними кранами, офісні приміщення 
також мають бути забезпечені первинними засобами пожежогасіння. Вибір типу та 
необхідна кількість вогнегасників здійснюється відповідно до «Правил експлуата-
ції та типових норми належності вогнегасників» від 15.01.2018 р.  № 25. На 20 м² 
площі підлоги в офісних приміщеннях з оргтехнікою, слід передбачати по одному 
газовому вогнегаснику з величиною заряду вогнегасної речовини 3 кг і більше.  
В приміщенні наявні 2 7 вогнегасників типу ВВК-2, що не задовольняє вимо-
гам, описаних в правилах експлуатації вогнегасників. Приміщення також облад-
нане протипожежною сигналізацією та автономною системою гасіння пожежі. 
Отже, для забезпечення первинними засобами пожежогасіння слід додати 3 вогне-
гасника ВВК-1,4 чи ВВК-2. 
Шкідливі хімічні речовини. Їх наявність у офісних приміщеннях пов’язана із 
використанням неякісних синтетичних матеріалів, чорнил для копіювального об-
ладнання. Це може бути: 
− підвищена концентрація озону через погану вентиляцію та несвоєчасну за-
міну в принтері озонового фільтра, що пригнічує організм людини; 
− пари формальдегіду від оздоблювальних матеріалів приміщення, дешевих 
меблів, килимового покриття або ламінату низької якості; висока концентра-
ція збільшує ризик виникнення ракових пухлин, алергії, пригнічує діяльність 
нервової та серцево-судинної систем; 
− повітря, забруднене викидами промислових підприємств та смогом від авто-
трас, що може викликати нудоту, сухий кашель. 
− наявність пилу в приміщенні, який може містити шкідливі речовини – чадний 
газ, алергени та збудники різних захворювань, що може спричинити різні 
алергічні реакції та підвищує рівень втоми. 
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 49 
 
Гранично-допустимі концентрації хімічних речовин визначаються за «Гігіє-
нічними регламентами хімічних речовин у повітрі робочої зони» від 14.07.2020 № 
1596. Фактичні та нормативні значення концентрації виявлених шкідливих речовин 
в повітрі наступні: 
1) концентрація формальдегіду: 0,1 мг/м3 (гранично-допустима концентрація – 
0,5 мг/м3); 
2) концентрація паперового та бавовняного пилу: 0,3 мг/м3 (гранично-допус-
тима концентрація – 2 мг/м3). 
Отже, концентрації шкідливих речовин знаходяться в межах гранично-допу-
стимих значень, що забезпечує допустимі умови праці. Приміщення має систему 
вентиляції, передбачену при проектуванні будівлі, а також в ньому здійснюються 
періодичні вологі прибирання. 
Електромагнітне випромінювання. Джерелом електромагнітного поля є будь-
яка техніка, яку в офісі підключають до звичайної побутової електромережі (напру-
гою 220 В та частотою 50 Гц). Такі поля пристроїв можуть викликати у працівників 
слабкість, головну біль, сонливість, підвищити стомлюваність. 
Гранично-допустимі рівні впливу електричних полів встановлює ДНАОП 
0.03-3.16-86 для частот від 0,06 МГц до 300МГц. Допустимі параметри поля для 
напруженості електромагнітного поля в 35 МГц за електричною складовою – 10 
В/м, за магнітною складовою – 0,3 А/м. Фактичний рівень – за електричною скла-
довою: 8 В/м, за магнітною складовою: 0,2 А/м – відповідає гранично допустимим 
нормам.  
Шум. Джерелом виникнення шумів для офісного приміщення може бути: ро-
бота всієї наявної офісної техніки; розмови самих співробітників; вуличний шум 
від автотрас, будівництва тощо. Часто шум викликає у людини дратівливість, осла-
блення пам'яті, апатію, зниження слуху, пригнічений настрій, розлад сну. 
Допустимий еквівалентний рівень звуку за ДСН 3.3.6.037-99 «Державні сані-
тарні норми виробничого шуму, ультразвуку та інфразвуку» для робочого місця 
офісних працівників, обладнаного персональним комп’ютером, становить 50 дБА. 
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 50 
 
Фактичний еквівалентний рівень звуку за звичайних умов роботи від комп’ютерів 
та принтерів становить 38 дБА, що відповідає нормативним вимогам. Проте в теп-
лий період року при роботі кондиціонерів чи зволожувачів рівень шуму досягає 50 
дБА, та завдяки віддаленому розташуванні робочих місць від джерел шуму теж ві-
дповідає допустимому рівню. 
Мікроклімат. Мікроклімат приміщень – це клімат внутрішнього середовища 
цих приміщень, який визначається поєднаннями температури, вологості і швидко-
сті руху повітря, що діють на організм людини. Обчислювальна техніка є джерелом 
суттєвих тепловиділень, що може призвести до підвищення температури та зни-
ження відносної вологості у приміщенні. Незадовільні параметри мікроклімату ча-
сто знижують працездатність працівників. 
Нормативні значення параметрів мікроклімату встановлюють ДСН 3.3.6.042-
99 «Санітарні норми мікроклімату виробничих приміщень». Даний документ про-
понує розмежування  параметрів мікроклімату в залежності від виду робіт  за  важ-
кістю. Робота в даному приміщенні відноситься до категорії Іа – робота, що вико-
нується сидячи і не потребує фізичного напруження. Нормативні параметри мікро-
клімату наступні: 
1) температура повітря:  
a) в холодний період року: оптимальне значення – 22-24 °С, допустиме значення 
– 21-25°С; 
b) в теплий період року: оптимальне значення – 23-25 °С, допустиме значення – 
22-28°С. 
2) відносна вологість повітря: оптимальне значення – 40-60%; 
3) швидкість руху повітря: 
a) в холодний період року: оптимальне значення – 0,1 м/с, допустиме значення 
– ≤ 0,1 м/с. 
b) в теплий період року: оптимальне значення – 0,1 м/с, допустиме значення – 
0,1-0,2 м/с. 
Фактичні параметри мікроклімату заданого приміщення наступні: 
 Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 51 
 
1) температура повітря:  
a) в холодний період року: 22°С; 
b) в теплий період року: 25°С. 
2) відносна вологість повітря – 45%; 
3) швидкість руху повітря – 0 м/с. 
Отже, фактичні параметри мікроклімату відповідають нормативним показни-
кам. Приміщення обладнане 4 кондиціонерами Cooper&Hunter CH-S18FTXN-PW з 
площею обслуговування до 55 м2 та 1 зволожувачем повітря Boneco W300 у зоні 
відпочинку з площею зволоження 50 м2, що дозволяє підтримувати оптимальну во-
логість та температуру, а у холодну пору року використовується система водяного 
опалення. 
Не менш важливою є напруженість праці, яка пов’язана з монотонністю дій, 
великим інтелектуальним, сенсорним (спостереження за монітором) та емоційним 
навантаженням. Це впливає на психічний стан людини, швидше накопичується 
втома, виникає млявість, знижується увага.  
Клас умов праці визначає «Гігієнічна класифікація праці за показниками шкі-
дливості та небезпечності факторів виробничого середовища, важкості та напруже-
ності трудового процесу» від 08.04.2014 № 248. Загальна оцінка напруженості праці 
у відділі інформаційних технологій – 2 ступінь шкідливості. 
Одним з важливих заходів попередження травматизму є проведення інструк-
тажів з охорони праці хоча б 1 раз на 6 місяців. Види та порядок проведення інстру-
ктажів з охорони праці визначені «Типовим  положенням  про  порядок  проведення  
навчання  і  перевірки  знань  з питань охорони праці» від 26.01.2005 р. № 15. Пра-
цівники даного приміщення пройшли вступні та первинні інструктажі, а також про-
ходять повторні інструктажі кожні півроку, про що свідчать відмітки у спеціаль-
ному журналі. В них містяться вимоги безпеки перед початком, під час та після 
закінчення роботи, в аварійних ситуаціях, в тому числі висвітлюються правила 
електро- та пожежобезпеки.  
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 52 
 
Отже, враховуючи проведений аналіз небезпек та шкідливостей, задля ство-
рення безпечних умов праці в заданому приміщенні необхідно забезпечити нале-
жне коригування системи штучного освітлення приміщення і робочого місця. 
 
4.2. Розробка системи штучного освітлення 
 
У приміщенні, де обладнуватимуться робочі місця співробітників, що працю-
ватимуть на комп’ютері, повинні бути наявні елементи природного (створюваного 
світлом з вікна) та штучного освітлення (отримуваного з освітлювальних при-
строїв). Величина необхідного освітлення нормується за ДБН В.2.5-28-2018 «При-
родне і штучне освітлення», на які потрібно орієнтуватись під час проектування 
освітлення нових чи вже існуючих приміщень. 
Комфортні умови для офісних працівників також залежать від здатності по-
верхонь відбивати світло. Тут враховують відблиски, які дають не лише лампи, а й 
огороджуючі конструкції. Оптимальними коефіцієнтами відбивання поверхонь для 
офісних приміщень з комп’ютерами вважаються: для стін – 40-60%, для підлоги – 
10-40%, для стелі – 70-80%. Тому дані поверхні слід пофарбувати такими кольо-
рами: 
− стіни – світло-сірий (коефіцієнт відбивання ρстіни=59). 
− підлога – бежево-коричневий (коефіцієнт відбивання ρпідл=13). 
− стеля – кремово-білий (коефіцієнт відбивання ρстелі=77). 
Розробка системи штучного освітлення полягає у виборі розрахунку кілько-
сті світильників, необхідних для забезпечення нормативного рівня штучного осві-
тлення на робочих місцях в заданому приміщенні. 
При виборі необхідних світильників потрібно зважати на тип лампи в ньому. 
Наразі система штучного освітлення представлена 10 світильниками типу TBS260 
2x54, що є недостатнім для забезпечення достатнього рівня освітлення. Крім того, 
дані світильники вже перевищили свій срок служби і часто спостерігається мерех-
тіння, яке підвищує стомлюваність та дратівливість працівників. 
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 53 
 
Люмінесцентні лампи меншою мірою нагріваються, ніж лампи розжарю-
вання, більш довговічні (8000 годин) і споживають менше електроенергії, створю-
ючи такий же світловий потік. Але у них вистачає й недоліків: 
− наявність пульсації, некомфортне для зору світло; 
− деградація світлового потоку протягом перших місяців використання; 
− наявність у складі ртуті; 
− чутливість до значення напруги у мережі. 
Найкращим рішенням буде впровадження світлодіодних світильників: вони 
найбільш енергоефективні, довговічні, екологічні, ударостійкі, легкі, невибагливі 
до навколишніх умов та напруги в мережі. Їхній єдиний мінус – висока вартість, 
хоча у розрахунку на тривалу перспективу є найбільш економічно вигідним 
варіантом. Строк служби таких світильників досягає 50 000 год. 
Зазвичай для офісів використовують світильники прямого і розсіяного світла 
з кривою сили світла (КСС) типу Г (глибока крива) та Д (косинусна крива). Зважа-
ючи на тип приміщення та його висоту, оберемо світлодіодну панель LED FLF-87 
72W з високою потужністю та косинусною КСС, та які призначені саме для офісних 
приміщень (рис. 4.1). 
 
Рис. 4.1 – Світильник FLF-87 72W 
 
Світлодіодна панель виготовлена з металу та напівпрозорого акрилу. Акрил 
служить розсіювачем світла, який не пожовкне з часом. Панель випромінює тепле 
біле світіння. До стелі світлодіодна панель кріпиться за допомогою спеціального 
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 54 
 
комплекту підвісок. Характеристики даного світильника наступні (табл. 4.1): 
Таблиця 4.1 – Технічні характеристики вибраного світильника 
Тип світильника FLF-87 72W 
К-сть світлодіодів, n 360 
Тип лампи SMD 2835 
Світловий потік лампи Fл, лм 14 
Потужність P, Вт 72 
Тип КСС Д 
Індекс кольоропередачі >70Ra 
Відтінок (колір) світіння Теплий (2700-3500К) 
Ступінь захисту IP20 
довжина ширина висота 
Габаритні розміри світильника, мм 
1196 596 10 
 
Для визначення кількості потрібних світильників потрібен коефіцієнт викори-
стання світлового потоку. Для нього потрібно визначити індекс заданого примі-
щення (4.2). 
���� = ����∙���� = 20∙10 = 200
( ) ( ) ( ) ( ) = 2,5                     (4.2) 
h−0,8 ∙ ����+���� 3,5−0,8 ∙ 20+10 2,7∙30
 
Тепер визначимо кількість люмінесцентних світильників за формулою 4.3. 
���� = ����н∙����підл∙����∙Кз∙100 = 300∙200∙1,15∙1,4∙100
η = 23,66 ≈ 24
����∙���� ∙ 360∙14∙81                               (4.3) 
л
 
де Ен − нормативний рівень штучного загального освітлення, лк (для офісних при-
міщень Ен = 300 лк); 
Кз − коефіцієнт запасу, який враховує зниження освітлення в процесі експлуатації 
(для приміщення з нормальними умовами середовища Кз = 1,4); 
z – коефіцієнт мінімального освітлення (для світлодіодних ламп z = 1,15); 
 
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 55 
 
n – кількість ламп у світильнику (згідно обраного світильника n = 360); 
Fл – світловий потік лампи (Fл = 14 лм); 
η – коефіцієнт використання світлового потоку (для індексу приміщення i = 2,5 та 
для косинусної КСС, η = 81). 
Тепер неоебхідно розташувати 24 світильники рівномірно на стелі заданого 
приміщення з урахуванням розмірів приміщення та габаритних розмірів обраних 
світильників. Варто зазначити, що при відстані між рядами світильників l, відстань 
між стіною та найближчим рядом світильників повинна становити l/2. Ширина та-
кого приміщення дозволяє розташувати або 4 ряди по 6 світильників або 3 по 8 
світильників. Оберемо найбільш оптимальний спосіб та визначимо план розташу-
вання світильників (рис. 4.3). 
 
Рис. 4.2 – План розташування світильників 
 
 Отже, для забезпечення нормативного рівня штучного освітлення в офісному 
приміщенні необхідно встановити 24 світильники типу FLF-87 72W у 4 ряди по 6 
світильників у кожному. Створені умови мають забезпечувати комфортну роботу праці-
вників офісу. 
 Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 56 
 
ВИСНОВКИ 
 
У ході виконання дипломної роботи були вирішені поставлені завдання, що 
дозволили досягти мети, яка полягала в практичній реалізації криптоалгоритму 
AES, особливістю якої є його удосконалення для зменшення часу обробки даних. 
Для цього роботу було вирішено поділити на такі частини: пошук та огляд інфор-
маційних джерел, огляд існуючих алгоритмів шифрування; аналіз алгоритму шиф-
рування даних AES та методів його удосконалення; розробка загальної структури 
програмного засобу криптографічного захисту інформації, програмна реалізація 
криптоалгоритму AES; програмна реалізація удосконаленого криптоалгоритму 
AES; розробка графічного інтерфейсу та тестування програми; порівняння практи-
чної реалізації криптоалгоритмів AES; оформлення текстової документації та гра-
фічного матеріалу. Виконання етапів дипломної роботи відбувалося згідно кален-
дарного плану. 
У теоретичній частині роботи було проведено огляд існуючих алгоритмів си-
метричного шифрування – наведені загальні відомості та декілька прикладів симе-
тричних алгоритмів шифрування. Також було розглянуто принципи побудови ал-
горитму шифрування даних AES та методи його удосконалення для зменшення 
часу обробки даних без втрати криптостійкості шифру. 
В практичній частині, після розроблення блок-схем процесів шифрування та 
дешифрування, приведено з поясненнями та коментарями фрагменти програмного 
коду для кожного етапу роботи. Описано створення функцій таких операцій: 
SubBytes, ShiftRows, MixColumns, AddRoundKey для шифрування та InvSubBytes, 
InvMixColumns, InvShiftRows для дешифрування; генерування раундових ключів 
за допомогою операції KeyExpansion; описано ініціалізацію початкового повідом-
лення та процес зчитування зашифрованого. Також було описано та реалізовано всі 
модифікації даних операцій для оптимізації алгоритму, а в кінці даного розділу на-
ведений порівняльний аналіз звичайної та удосконаленої програмних реалізацій 
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 57 
 
криптоалгоритму у вигляді таблиць та графіків. Покращена реалізація показує зна-
чний  відсоток оптимізації – до 50% при шифруванні та до 75% при дешифруванні 
даних. 
Важливим етапом практичної частини є розробка зручного графічного інтер-
фейсу програмного засобу для шифрування даних, основою якого стала удоскона-
лена реалізація криптоалгоритму AES, а також його тестування. 
Отже, результатом дипломної роботи є практична реалізація алгоритму AES, 
його оптимізація, порівняльний аналіз алгоритмів для визначення ступеня оптимі-
зації та робочий програмний засіб для шифрування даних, а всі поставлені цілі та 
задачі на початку роботи виконані так, як і передбачалося. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 58 
 
 
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ 
 
1. Корченко О. Г. Прикладна криптологія : системи шифрування : підручник / О. 
Г. Корченко, В. П. Сіденко, Ю. О. Дрейс. – К. : ДУТ, 2014. – 448 с.: іл. 
2. Симетричні криптосистеми [Електронний ресурс] Режим доступу: 
https://znaimo.com.ua/%D0%A1%D0%B8%D0%BC%D0%B5%D1%82%D1%80%D
0%B8%D1%87%D0%BD%D1%96_%D0%BA%D1%80%D0%B8%D0%BF%D1%82
%D0%BE%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8#link9 
3. Глинчук Л.Я. Криптологія: навч.-метод. посіб. / Людмила Ярославівна Глинчук 
– Луцьк: Вежа-Друк, 2014. – 164 с. 
4. Симетричні алгоритми шифрування [Електронний ресурс] Режим доступу: 
https://stud.com.ua/94398/informatika/simetrichni_algoritmi_shifruvannya 
5. Різниця між DES (стандарт шифрування даних) і AES (розширений стандарт 
шифрування) [Електронний ресурс] Режим доступу: 
https://uk.gadget-info.com/difference-between-des 
6. Ю. А. Тарнавський; КПІ ім. Ігоря Сікорського. – Електронні текстові дані (1 
файл: 2,04 Мбайт). – Київ : КПІ ім. Ігоря Сікорського, 2018. – 162 с. 
7. Шифрування: типи і алгоритми. Що це, чим відрізняються і де використову-
ються? [Електронний ресурс] Режим доступу: 
https://wiki.hostpro.ua/ua/knowledgebase/shifruvannja-tipi-i-algoritmi/ 
8. Остапов С.Е., Валь Л.О. Основи криптографiї. Навчальний посiбник. – 
Чернiвцi: Книги – XXI, 2008. – 188 с 
9. FIPS PUB 197–2001. Specification for the Advanced Encryption Standard (AES), 
2001 
10. ДБН В.2.5-28:2018 Природне і штучне освітлення від 03.10.2018 № 264  
 
 
 
 
 
 Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 59 
 
ДОДАТОК А 
Лістинг програмної реалізації криптоалгоритму AES 
 
from PyQt5 import QtCore, QtGui, QtWidgets 
from PyQt5.QtWidgets import QFileDialog 
import base64 
import secrets 
 
sbox=( 
    0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76, 
    0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0, 
    0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15, 
    0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75, 
    0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84, 
    0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF, 
    0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8, 
    0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2, 
    0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73, 
    0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB, 
    0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79, 
    0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08, 
    0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A, 
    0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E, 
    0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF, 
    0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16 
) 
 
inv_sbox=( 
    0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB, 
    0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB, 
    0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E, 
    0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25, 
    0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92, 
    0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84, 
    0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06, 
    0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B, 
    0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73, 
    0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E, 
    0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B, 
    0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4, 
    0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F, 
    0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF, 
    0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61, 
    0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D 
) 
 
rcon=[[0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36], 
[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 
[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00], 
[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]] 
 
m02=(0x00,0x02,0x04,0x06,0x08,0x0a,0x0c,0x0e,0x10,0x12,0x14,0x16,0x18,0x1a,0x1c,0x1e, 
0x20,0x22,0x24,0x26,0x28,0x2a,0x2c,0x2e,0x30,0x32,0x34,0x36,0x38,0x3a,0x3c,0x3e, 
0x40,0x42,0x44,0x46,0x48,0x4a,0x4c,0x4e,0x50,0x52,0x54,0x56,0x58,0x5a,0x5c,0x5e, 
0x60,0x62,0x64,0x66,0x68,0x6a,0x6c,0x6e,0x70,0x72,0x74,0x76,0x78,0x7a,0x7c,0x7e,  
0x80,0x82,0x84,0x86,0x88,0x8a,0x8c,0x8e,0x90,0x92,0x94,0x96,0x98,0x9a,0x9c,0x9e, 
0xa0,0xa2,0xa4,0xa6,0xa8,0xaa,0xac,0xae,0xb0,0xb2,0xb4,0xb6,0xb8,0xba,0xbc,0xbe, 
0xc0,0xc2,0xc4,0xc6,0xc8,0xca,0xcc,0xce,0xd0,0xd2,0xd4,0xd6,0xd8,0xda,0xdc,0xde, 
 
 Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 60 
 
0xe0,0xe2,0xe4,0xe6,0xe8,0xea,0xec,0xee,0xf0,0xf2,0xf4,0xf6,0xf8,0xfa,0xfc,0xfe, 
0x1b,0x19,0x1f,0x1d,0x13,0x11,0x17,0x15,0x0b,0x09,0x0f,0x0d,0x03,0x01,0x07,0x05, 
0x3b,0x39,0x3f,0x3d,0x33,0x31,0x37,0x35,0x2b,0x29,0x2f,0x2d,0x23,0x21,0x27,0x25, 
0x5b,0x59,0x5f,0x5d,0x53,0x51,0x57,0x55,0x4b,0x49,0x4f,0x4d,0x43,0x41,0x47,0x45, 
0x7b,0x79,0x7f,0x7d,0x73,0x71,0x77,0x75,0x6b,0x69,0x6f,0x6d,0x63,0x61,0x67,0x65, 
0x9b,0x99,0x9f,0x9d,0x93,0x91,0x97,0x95,0x8b,0x89,0x8f,0x8d,0x83,0x81,0x87,0x85, 
0xbb,0xb9,0xbf,0xbd,0xb3,0xb1,0xb7,0xb5,0xab,0xa9,0xaf,0xad,0xa3,0xa1,0xa7,0xa5, 
0xdb,0xd9,0xdf,0xdd,0xd3,0xd1,0xd7,0xd5,0xcb,0xc9,0xcf,0xcd,0xc3,0xc1,0xc7,0xc5, 
0xfb,0xf9,0xff,0xfd,0xf3,0xf1,0xf7,0xf5,0xeb,0xe9,0xef,0xed,0xe3,0xe1,0xe7,0xe5) 
 
m03=(0x00,0x03,0x06,0x05,0x0c,0x0f,0x0a,0x09,0x18,0x1b,0x1e,0x1d,0x14,0x17,0x12,0x11, 
0x30,0x33,0x36,0x35,0x3c,0x3f,0x3a,0x39,0x28,0x2b,0x2e,0x2d,0x24,0x27,0x22,0x21, 
0x60,0x63,0x66,0x65,0x6c,0x6f,0x6a,0x69,0x78,0x7b,0x7e,0x7d,0x74,0x77,0x72,0x71, 
0x50,0x53,0x56,0x55,0x5c,0x5f,0x5a,0x59,0x48,0x4b,0x4e,0x4d,0x44,0x47,0x42,0x41, 
0xc0,0xc3,0xc6,0xc5,0xcc,0xcf,0xca,0xc9,0xd8,0xdb,0xde,0xdd,0xd4,0xd7,0xd2,0xd1, 
0xf0,0xf3,0xf6,0xf5,0xfc,0xff,0xfa,0xf9,0xe8,0xeb,0xee,0xed,0xe4,0xe7,0xe2,0xe1, 
0xa0,0xa3,0xa6,0xa5,0xac,0xaf,0xaa,0xa9,0xb8,0xbb,0xbe,0xbd,0xb4,0xb7,0xb2,0xb1, 
0x90,0x93,0x96,0x95,0x9c,0x9f,0x9a,0x99,0x88,0x8b,0x8e,0x8d,0x84,0x87,0x82,0x81,  
0x9b,0x98,0x9d,0x9e,0x97,0x94,0x91,0x92,0x83,0x80,0x85,0x86,0x8f,0x8c,0x89,0x8a, 
0xab,0xa8,0xad,0xae,0xa7,0xa4,0xa1,0xa2,0xb3,0xb0,0xb5,0xb6,0xbf,0xbc,0xb9,0xba, 
0xfb,0xf8,0xfd,0xfe,0xf7,0xf4,0xf1,0xf2,0xe3,0xe0,0xe5,0xe6,0xef,0xec,0xe9,0xea,  
0xcb,0xc8,0xcd,0xce,0xc7,0xc4,0xc1,0xc2,0xd3,0xd0,0xd5,0xd6,0xdf,0xdc,0xd9,0xda,  
0x5b,0x58,0x5d,0x5e,0x57,0x54,0x51,0x52,0x43,0x40,0x45,0x46,0x4f,0x4c,0x49,0x4a, 
0x6b,0x68,0x6d,0x6e,0x67,0x64,0x61,0x62,0x73,0x70,0x75,0x76,0x7f,0x7c,0x79,0x7a,  
0x3b,0x38,0x3d,0x3e,0x37,0x34,0x31,0x32,0x23,0x20,0x25,0x26,0x2f,0x2c,0x29,0x2a, 
0x0b,0x08,0x0d,0x0e,0x07,0x04,0x01,0x02,0x13,0x10,0x15,0x16,0x1f,0x1c,0x19,0x1a) 
 
m09=(0x00,0x09,0x12,0x1b,0x24,0x2d,0x36,0x3f,0x48,0x41,0x5a,0x53,0x6c,0x65,0x7e,0x77, 
0x90,0x99,0x82,0x8b,0xb4,0xbd,0xa6,0xaf,0xd8,0xd1,0xca,0xc3,0xfc,0xf5,0xee,0xe7, 
0x3b,0x32,0x29,0x20,0x1f,0x16,0x0d,0x04,0x73,0x7a,0x61,0x68,0x57,0x5e,0x45,0x4c, 
0xab,0xa2,0xb9,0xb0,0x8f,0x86,0x9d,0x94,0xe3,0xea,0xf1,0xf8,0xc7,0xce,0xd5,0xdc, 
0x76,0x7f,0x64,0x6d,0x52,0x5b,0x40,0x49,0x3e,0x37,0x2c,0x25,0x1a,0x13,0x08,0x01, 
0xe6,0xef,0xf4,0xfd,0xc2,0xcb,0xd0,0xd9,0xae,0xa7,0xbc,0xb5,0x8a,0x83,0x98,0x91, 
0x4d,0x44,0x5f,0x56,0x69,0x60,0x7b,0x72,0x05,0x0c,0x17,0x1e,0x21,0x28,0x33,0x3a, 
0xdd,0xd4,0xcf,0xc6,0xf9,0xf0,0xeb,0xe2,0x95,0x9c,0x87,0x8e,0xb1,0xb8,0xa3,0xaa,  
0xec,0xe5,0xfe,0xf7,0xc8,0xc1,0xda,0xd3,0xa4,0xad,0xb6,0xbf,0x80,0x89,0x92,0x9b,  
0x7c,0x75,0x6e,0x67,0x58,0x51,0x4a,0x43,0x34,0x3d,0x26,0x2f,0x10,0x19,0x02,0x0b, 
0xd7,0xde,0xc5,0xcc,0xf3,0xfa,0xe1,0xe8,0x9f,0x96,0x8d,0x84,0xbb,0xb2,0xa9,0xa0, 
0x47,0x4e,0x55,0x5c,0x63,0x6a,0x71,0x78,0x0f,0x06,0x1d,0x14,0x2b,0x22,0x39,0x30, 
0x9a,0x93,0x88,0x81,0xbe,0xb7,0xac,0xa5,0xd2,0xdb,0xc0,0xc9,0xf6,0xff,0xe4,0xed, 
0x0a,0x03,0x18,0x11,0x2e,0x27,0x3c,0x35,0x42,0x4b,0x50,0x59,0x66,0x6f,0x74,0x7d,  
0xa1,0xa8,0xb3,0xba,0x85,0x8c,0x97,0x9e,0xe9,0xe0,0xfb,0xf2,0xcd,0xc4,0xdf,0xd6, 
0x31,0x38,0x23,0x2a,0x15,0x1c,0x07,0x0e,0x79,0x70,0x6b,0x62,0x5d,0x54,0x4f,0x46) 
 
m0b=(0x00,0x0b,0x16,0x1d,0x2c,0x27,0x3a,0x31,0x58,0x53,0x4e,0x45,0x74,0x7f,0x62,0x69, 
0xb0,0xbb,0xa6,0xad,0x9c,0x97,0x8a,0x81,0xe8,0xe3,0xfe,0xf5,0xc4,0xcf,0xd2,0xd9, 
0x7b,0x70,0x6d,0x66,0x57,0x5c,0x41,0x4a,0x23,0x28,0x35,0x3e,0x0f,0x04,0x19,0x12, 
0xcb,0xc0,0xdd,0xd6,0xe7,0xec,0xf1,0xfa,0x93,0x98,0x85,0x8e,0xbf,0xb4,0xa9,0xa2, 
0xf6,0xfd,0xe0,0xeb,0xda,0xd1,0xcc,0xc7,0xae,0xa5,0xb8,0xb3,0x82,0x89,0x94,0x9f, 
0x46,0x4d,0x50,0x5b,0x6a,0x61,0x7c,0x77,0x1e,0x15,0x08,0x03,0x32,0x39,0x24,0x2f, 
0x8d,0x86,0x9b,0x90,0xa1,0xaa,0xb7,0xbc,0xd5,0xde,0xc3,0xc8,0xf9,0xf2,0xef,0xe4, 
0x3d,0x36,0x2b,0x20,0x11,0x1a,0x07,0x0c,0x65,0x6e,0x73,0x78,0x49,0x42,0x5f,0x54, 
0xf7,0xfc,0xe1,0xea,0xdb,0xd0,0xcd,0xc6,0xaf,0xa4,0xb9,0xb2,0x83,0x88,0x95,0x9e, 
0x47,0x4c,0x51,0x5a,0x6b,0x60,0x7d,0x76,0x1f,0x14,0x09,0x02,0x33,0x38,0x25,0x2e, 
0x8c,0x87,0x9a,0x91,0xa0,0xab,0xb6,0xbd,0xd4,0xdf,0xc2,0xc9,0xf8,0xf3,0xee,0xe5, 
0x3c,0x37,0x2a,0x21,0x10,0x1b,0x06,0x0d,0x64,0x6f,0x72,0x79,0x48,0x43,0x5e,0x55, 
0x01,0x0a,0x17,0x1c,0x2d,0x26,0x3b,0x30,0x59,0x52,0x4f,0x44,0x75,0x7e,0x63,0x68, 
0xb1,0xba,0xa7,0xac,0x9d,0x96,0x8b,0x80,0xe9,0xe2,0xff,0xf4,0xc5,0xce,0xd3,0xd8, 
0x7a,0x71,0x6c,0x67,0x56,0x5d,0x40,0x4b,0x22,0x29,0x34,0x3f,0x0e,0x05,0x18,0x13, 
0xca,0xc1,0xdc,0xd7,0xe6,0xed,0xf0,0xfb,0x92,0x99,0x84,0x8f,0xbe,0xb5,0xa8,0xa3) 
 
 Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 61 
 
m0d=(0x00,0x0d,0x1a,0x17,0x34,0x39,0x2e,0x23,0x68,0x65,0x72,0x7f,0x5c,0x51,0x46,0x4b, 
0xd0,0xdd,0xca,0xc7,0xe4,0xe9,0xfe,0xf3,0xb8,0xb5,0xa2,0xaf,0x8c,0x81,0x96,0x9b, 
0xbb,0xb6,0xa1,0xac,0x8f,0x82,0x95,0x98,0xd3,0xde,0xc9,0xc4,0xe7,0xea,0xfd,0xf0, 
0x6b,0x66,0x71,0x7c,0x5f,0x52,0x45,0x48,0x03,0x0e,0x19,0x14,0x37,0x3a,0x2d,0x20, 
0x6d,0x60,0x77,0x7a,0x59,0x54,0x43,0x4e,0x05,0x08,0x1f,0x12,0x31,0x3c,0x2b,0x26, 
0xbd,0xb0,0xa7,0xaa,0x89,0x84,0x93,0x9e,0xd5,0xd8,0xcf,0xc2,0xe1,0xec,0xfb,0xf6, 
0xd6,0xdb,0xcc,0xc1,0xe2,0xef,0xf8,0xf5,0xbe,0xb3,0xa4,0xa9,0x8a,0x87,0x90,0x9d, 
0x06,0x0b,0x1c,0x11,0x32,0x3f,0x28,0x25,0x6e,0x63,0x74,0x79,0x5a,0x57,0x40,0x4d, 
0xda,0xd7,0xc0,0xcd,0xee,0xe3,0xf4,0xf9,0xb2,0xbf,0xa8,0xa5,0x86,0x8b,0x9c,0x91, 
0x0a,0x07,0x10,0x1d,0x3e,0x33,0x24,0x29,0x62,0x6f,0x78,0x75,0x56,0x5b,0x4c,0x41, 
0x61,0x6c,0x7b,0x76,0x55,0x58,0x4f,0x42,0x09,0x04,0x13,0x1e,0x3d,0x30,0x27,0x2a, 
0xb1,0xbc,0xab,0xa6,0x85,0x88,0x9f,0x92,0xd9,0xd4,0xc3,0xce,0xed,0xe0,0xf7,0xfa, 
0xb7,0xba,0xad,0xa0,0x83,0x8e,0x99,0x94,0xdf,0xd2,0xc5,0xc8,0xeb,0xe6,0xf1,0xfc, 
0x67,0x6a,0x7d,0x70,0x53,0x5e,0x49,0x44,0x0f,0x02,0x15,0x18,0x3b,0x36,0x21,0x2c, 
0x0c,0x01,0x16,0x1b,0x38,0x35,0x22,0x2f,0x64,0x69,0x7e,0x73,0x50,0x5d,0x4a,0x47, 
0xdc,0xd1,0xc6,0xcb,0xe8,0xe5,0xf2,0xff,0xb4,0xb9,0xae,0xa3,0x80,0x8d,0x9a,0x97) 
 
m0e=(0x00,0x0e,0x1c,0x12,0x38,0x36,0x24,0x2a,0x70,0x7e,0x6c,0x62,0x48,0x46,0x54,0x5a, 
0xe0,0xee,0xfc,0xf2,0xd8,0xd6,0xc4,0xca,0x90,0x9e,0x8c,0x82,0xa8,0xa6,0xb4,0xba, 
0xdb,0xd5,0xc7,0xc9,0xe3,0xed,0xff,0xf1,0xab,0xa5,0xb7,0xb9,0x93,0x9d,0x8f,0x81, 
0x3b,0x35,0x27,0x29,0x03,0x0d,0x1f,0x11,0x4b,0x45,0x57,0x59,0x73,0x7d,0x6f,0x61, 
0xad,0xa3,0xb1,0xbf,0x95,0x9b,0x89,0x87,0xdd,0xd3,0xc1,0xcf,0xe5,0xeb,0xf9,0xf7, 
0x4d,0x43,0x51,0x5f,0x75,0x7b,0x69,0x67,0x3d,0x33,0x21,0x2f,0x05,0x0b,0x19,0x17, 
0x76,0x78,0x6a,0x64,0x4e,0x40,0x52,0x5c,0x06,0x08,0x1a,0x14,0x3e,0x30,0x22,0x2c, 
0x96,0x98,0x8a,0x84,0xae,0xa0,0xb2,0xbc,0xe6,0xe8,0xfa,0xf4,0xde,0xd0,0xc2,0xcc, 
0x41,0x4f,0x5d,0x53,0x79,0x77,0x65,0x6b,0x31,0x3f,0x2d,0x23,0x09,0x07,0x15,0x1b, 
0xa1,0xaf,0xbd,0xb3,0x99,0x97,0x85,0x8b,0xd1,0xdf,0xcd,0xc3,0xe9,0xe7,0xf5,0xfb, 
0x9a,0x94,0x86,0x88,0xa2,0xac,0xbe,0xb0,0xea,0xe4,0xf6,0xf8,0xd2,0xdc,0xce,0xc0, 
0x7a,0x74,0x66,0x68,0x42,0x4c,0x5e,0x50,0x0a,0x04,0x16,0x18,0x32,0x3c,0x2e,0x20, 
0xec,0xe2,0xf0,0xfe,0xd4,0xda,0xc8,0xc6,0x9c,0x92,0x80,0x8e,0xa4,0xaa,0xb8,0xb6, 
0x0c,0x02,0x10,0x1e,0x34,0x3a,0x28,0x26,0x7c,0x72,0x60,0x6e,0x44,0x4a,0x58,0x56, 
0x37,0x39,0x2b,0x25,0x0f,0x01,0x13,0x1d,0x47,0x49,0x5b,0x55,0x7f,0x71,0x63,0x6d, 
0xd7,0xd9,0xcb,0xc5,0xef,0xe1,0xf3,0xfd,0xa7,0xa9,0xbb,0xb5,0x9f,0x91,0x83,0x8d) 
 
def sh_sub(state, inv=0): 
    if inv==0: 
        box=sbox 
        index=[0,5,10,15,4,9,14,3,8,13,2,7,12,1,6,11] 
    else: 
        box=inv_sbox     
        index=[0,13,10,7,4,1,14,11,8,5,2,15,12,9,6,3] 
 
    state = [box[state[i]] for i in index] 
 
    return state 
 
def mix_add(state, round_key, round, inv=0): 
    col=0 
    if inv==0: 
        for i in range(0,16,4): 
            s0=m02[state[i]]^m03[state[i+1]]^state[i+2]^state[i+3] 
            s1=state[i]^m02[state[i+1]]^m03[state[i+2]]^state[i+3] 
            s2=state[i]^state[i+1]^m02[state[i+2]]^m03[state[i+3]] 
            s3=m03[state[i]]^state[i+1]^state[i+2]^m02[state[i+3]] 
 
            state[i]=s0^round_key[0][4*round+col] 
            state[i+1]=s1^round_key[1][4*round+col] 
            state[i+2]=s2^round_key[2][4*round+col] 
            state[i+3]=s3^round_key[3][4*round+col] 
            col+=1 
 
 Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 62 
 
    else: #дешифрування 
        for i in range(0,16,4): 
 
            state[i]=state[i]^round_key[0][4*round+col] 
            state[i+1]=state[i+1]^round_key[1][4*round+col] 
            state[i+2]=state[i+2]^round_key[2][4*round+col] 
            state[i+3]=state[i+3]^round_key[3][4*round+col] 
            col+=1 
             
            s0=m0e[state[i]]^m0b[state[i+1]]^m0d[state[i+2]]^m09[state[i+3]] 
            s1=m09[state[i]]^m0e[state[i+1]]^m0b[state[i+2]]^m0d[state[i+3]] 
            s2=m0d[state[i]]^m09[state[i+1]]^m0e[state[i+2]]^m0b[state[i+3]] 
            s3=m0b[state[i]]^m0d[state[i+1]]^m09[state[i+2]]^m0e[state[i+3]] 
 
            state[i]=s0 
            state[i+1]=s1 
            state[i+2]=s2 
            state[i+3]=s3 
 
    return state 
def m02(num): 
    if (num<0x80): 
        res=(num<<1) 
    else: 
        res=(num<<1)^0x1b 
    return res%0x100 
 
def m03(num): 
    return m02(num)^num 
 
def m09(num): 
    return m02(m02(m02(num)))^num 
  
def m0b(num): 
    return m02(m02(m02(num)))^m02(num)^num 
 
def m0d(num): 
    return m02(m02(m02(num)))^m02(m02(num))^num 
 
def m0e(num): 
    return m02(m02(m02(num)))^m02(m02(num))^m02(num) 
 
def key_expansion(key,r,k): 
 
    #доповнення ключа, якщо його довжина менша за потрібну 
    if len(key)<4*k: 
        for i in range(4*k-len(key)): 
            key.append('0') 
    key=[ord(k) for k in key] 
 #заповнення першого раундового ключа на основі секретного 
    round_key=[[] for i in range(4)]      
    for i in range(4): 
        for j in range(k): 
            round_key[i].append(key[i+4*j]) 
 
    #продовження заповнення раундового ключа 
    for i in range(k, 4*(r+1)):         
        #для кожної k колонки 
        if (i%k==0): #циклічний зсув на 1 елемент в попередній колонці w 
            w=[round_key[row][i-1] for row in range(1, 4)] 
 
 Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 63 
 
            w.append(round_key[0][i-1]) 
            #заміняємо кожен елемент колонки w на відповідний з sbox   
            for j in range(4):   
                w[j]=sbox[w[j]] 
            #виконуємо операцію xor між 3-ма колонками 
            for row in range(4): 
                s=round_key[row][i-4]^w[row]^rcon[row][(i//k)-1] 
                round_key[row].append(s) 
 
    #для всіх інших колонок 
        else: 
            for row in range(4): 
                s=round_key[row][i-4]^round_key[row][i-1] 
                round_key[row].append(s) 
 
    return round_key 
 
def add_round_key(state, round_key, round):   
 
    col=0 
    for i in range(0,16,4): 
        #в залежності від раунду беремо потрібний нам раундовий ключ  
        state[i]=state[i]^round_key[0][4*round+col] 
        state[i+1]=state[i+1]^round_key[1][4*round+col] 
        state[i+2]=state[i+2]^round_key[2][4*round+col] 
        state[i+3]=state[i+3]^round_key[3][4*round+col] 
        col+=1 
 
    return state 
 
def encrypt(state,key,r,k): 
    round_key=key_expansion(key,r,k) 
    state=add_round_key(state, round_key, 0) 
 
    for round in range(1, r): 
        state=sh_sub(state) 
        state=mix_add(state, round_key, round) 
 
    state=sh_sub(state) 
    state=add_round_key(state, round_key, round+1) 
    return state 
 
def decrypt(state,key,r,k): 
    round_key=key_expansion(key,r,k) 
    state=add_round_key(state, round_key, r) 
 
    round=r-1 
    while round>=1: 
 
        state=sh_sub(state,1) 
        state=mix_add(state, round_key, round, 1) 
        round-=1 
 
    state=sh_sub(state, 1) 
    state=add_round_key(state, round_key, round) 
    return state 
     
class Ui_MainWindow(object): 
    def setupUi(self, MainWindow): 
        MainWindow.setObjectName("MainWindow") 
 
 Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 64 
 
        MainWindow.resize(700, 500) 
        self.centralwidget = QtWidgets.QWidget(MainWindow) 
        self.centralwidget.setObjectName("centralwidget") 
 
        self.open_file = QtWidgets.QPushButton(self.centralwidget) 
        self.open_file.setGeometry(QtCore.QRect(530, 10, 140, 30)) 
 
        self.gener_key = QtWidgets.QPushButton(self.centralwidget) 
        self.gener_key.setGeometry(QtCore.QRect(530, 330, 140, 30)) 
         
        self.text = QtWidgets.QTextEdit(self.centralwidget) 
        self.text.setGeometry(QtCore.QRect(20, 50, 650, 250)) 
    
        self.key = QtWidgets.QTextEdit(self.centralwidget) 
        self.key.setGeometry(QtCore.QRect(20, 330, 500, 30)) 
    
        self.label_text = QtWidgets.QLabel(self.centralwidget) 
        self.label_text.setGeometry(QtCore.QRect(20, 30, 100, 16)) 
        
        self.label_key = QtWidgets.QLabel(self.centralwidget) 
        self.label_key.setGeometry(QtCore.QRect(20, 310, 100, 16)) 
      
        self.btn_encrypt = QtWidgets.QPushButton(self.centralwidget) 
        self.btn_encrypt.setGeometry(QtCore.QRect(170, 430, 140, 30)) 
 
        self.btn_decrypt = QtWidgets.QPushButton(self.centralwidget) 
        self.btn_decrypt.setGeometry(QtCore.QRect(390, 430, 140, 30)) 
       
        self.radioButton128 = QtWidgets.QRadioButton(self.centralwidget) 
        self.radioButton128.setGeometry(QtCore.QRect(20, 370, 62, 18)) 
        self.radioButton128.setChecked(True) 
         
        self.radioButton192 = QtWidgets.QRadioButton(self.centralwidget) 
        self.radioButton192.setGeometry(QtCore.QRect(20, 390, 62, 18)) 
 
        self.radioButton256 = QtWidgets.QRadioButton(self.centralwidget) 
        self.radioButton256.setGeometry(QtCore.QRect(20, 410, 62, 18)) 
 
        MainWindow.setCentralWidget(self.centralwidget) 
        self.menubar = QtWidgets.QMenuBar(MainWindow) 
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 25)) 
        self.menubar.setObjectName("menubar") 
        MainWindow.setMenuBar(self.menubar) 
        self.statusbar = QtWidgets.QStatusBar(MainWindow) 
        self.statusbar.setObjectName("statusbar") 
        MainWindow.setStatusBar(self.statusbar) 
 
        self.retranslateUi(MainWindow) 
        QtCore.QMetaObject.connectSlotsByName(MainWindow) 
 
        self.add_functions() 
 
    def retranslateUi(self, MainWindow): 
        _translate = QtCore.QCoreApplication.translate 
        MainWindow.setWindowTitle(_translate("MainWindow", "AES")) 
        self.btn_decrypt.setText(_translate("MainWindow", "Decrypt")) 
        self.label_text.setText(_translate("MainWindow", "Text:")) 
        self.label_key.setText(_translate("MainWindow", "Key:")) 
        self.btn_encrypt.setText(_translate("MainWindow", "Encrypt")) 
        self.radioButton128.setText(_translate("MainWindow", "128-bit")) 
 
 Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 65 
 
        self.radioButton192.setText(_translate("MainWindow", "192-bit")) 
        self.radioButton256.setText(_translate("MainWindow", "256-bit")) 
        self.open_file.setText(_translate("MainWindow", "Open file")) 
        self.gener_key.setText(_translate("MainWindow", "Generate key")) 
 
    def get_radio_butt(self): 
        if self.radioButton192.isChecked(): 
            k=6 
            r=12 
        elif self.radioButton256.isChecked(): 
            k=8 
            r=14 
        else: 
            k=4 
            r=10 
        return k, r 
 
    def add_functions(self): 
        self.btn_encrypt.clicked.connect(lambda: self.crypt(self.text.toPlainText(),self.key.toPlainText(),0)) 
        self.btn_decrypt.clicked.connect(lambda: self.crypt(self.text.toPlainText(),self.key.toPlainText(),1)) 
        self.open_file.clicked.connect(self.browsefiles) 
        self.gener_key.clicked.connect(self.generatekey) 
 
    def generatekey(self): 
        k = self.get_radio_butt()[0] 
        key = secrets.token_urlsafe(k*3) 
        self.key.setPlainText(key) 
 
    def browsefiles(self): 
        fname = QFileDialog.getOpenFileName() 
#якщо користувач не обрав файл, продовжуємо роботу програми 
        if fname == ('', ''): 
            return 
        else: #інакше відкриваємо файл 
            path = fname[0] 
            f = open(path, 'r', encoding="utf-8") 
            with f: 
                data = f.read() 
                self.text.setPlainText(data) 
     
    def crypt(self, text, key, inv): 
        k, r = self.get_radio_butt() 
         
        key=list(key) 
        res=[] 
         
        text=text.encode("UTF-8") 
 
        if inv==1: 
            text=base64.b64decode(text) 
     
        text=list(text) 
             
        blocks=[] #розбиття вхідного тексту на блоки 
        while (len(text)>16): 
            blocks.append(text[:16])  
            text=text[16:] 
        blocks.append(text) 
 
        #виконуємо (де)шифрування доти, доки не закінчаться блоки 
 
 Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 66 
 
        for b in range (len(blocks)): 
     
            #доповнення блоку вхідних даних 
            if len(blocks[b])<16: 
                for i in range(16-len(blocks[b])): 
                    text.append(ord('|')) 
            #заповнення маиву state по колонкам 
            state = [] 
            for i in range(16):      
                s=blocks[b][i] 
                state.append(s)  
 
            #якщо інверсії немає, виконуємо шифрування 
            if inv==0: 
                state=encrypt(state,key,r,k) 
 
            #якщо інверсія є, виконуємо дешифрування 
            elif inv==1: 
                state=decrypt(state,key,r,k) 
 
            res+=state 
 
        if inv==0: 
            res=bytes(res) 
            res=base64.b64encode(res) 
            res=res.decode("UTF-8") 
            self.label_text.setText("Encrypted text:") 
        else: 
            for i in range (16): 
                if res[-1]==ord("|"): 
                    res.remove(res[-1]) 
                else: 
                    break 
            res=bytes(res) 
            res=res.decode("UTF-8") 
            self.label_text.setText("Decrypted text:") 
         
        self.text.setPlainText(res) 
         
if __name__ == "__main__": 
    import sys 
    app = QtWidgets.QApplication(sys.argv) 
    MainWindow = QtWidgets.QMainWindow() 
    ui = Ui_MainWindow() 
    ui.setupUi(MainWindow) 
    MainWindow.show() 
    sys.exit(app.exec_()) 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 67 
 
ДОДАТОК Б 
Ілюстративний матеріал 
 
 
 
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 68 
 
 
 
 
 
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 69 
 
 
 
 
 
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 70 
 
 
 
 
 
 
Арк. 
Змн. Арк. № докум. Підпис Дата 71 
 
 
 
 
 
БІ8Б1І.8012.20.2128.010870.0274.82 4П8З Арк. 
 ПЗ 
Змн. Арк. № докум. Підпис Дата 72 
 
 
 
 
 
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 73 
 
 
 
 
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 74 
 
 
 
 
Арк. 
БІ81.022.18007.248 ПЗ 
Змн. Арк. № докум. Підпис Дата 75