команда позначає, що передавальний її клієнт виходить з мережі. Передається списку контактів при закритті програми.: Room: public_key - команда, що позначає, що посилає її клієнт хоче відкрити зашифроване приватне з'єднання в кімнаті room з відкритим ключем public_key.: Room: public_key - цією командою повинен відповісти клієнт у разі згоди на встановлення захищеного з'єднання в кімнаті room з відкритим ключем public_key.: room: message - ця команда служить для передачі повідомлень (message) між користувачами. Повідомлення доставляється в кімнату room. p align="justify"> Блок шифрування служить генерації ключів (відкритого і закритого), шифрування повідомлень на основі відкритого ключа і розшифровки повідомлень на основі відкритого та закритого ключів. Детальніше про використаний в цьому блоці алгоритмі шифрування RSA написано в додатку А.
Контролер служить в основному для зменшення зв'язності програмного коду, стежить за правильністю передачі подій всередині програми, своєчасним оновленням відображуваних користувачеві даних.
Графічне подання необхідно для відтворення користувача інтерфейсу і відображення всіх необхідних даних.
Функціональна схема шифрування з відкритим ключем представлена ​​на малюнку 3.2.
В
Рисунок 3.2 - Схема шифрування з відкритим ключем
Алгоритм шифрування повідомлення наступний:
користувач У вибирає пару ключів (e, d) і шле ключ шифрування e (відкритий ключ) користувачу А по відкритому каналу, а ключ розшифрування d (закритий ключ) захищений і секрети (він не повинен передаватися по відкритому каналу);
щоб послати повідомлення m користувачеві В, користувач А застосовує функцію шифрування, певну відкритим ключем e: Ee (m) = c, c - отриманий шифротекст;
користувач У розшифровує шифротекст c, застосовуючи зворотне перетворення Dd, однозначно певне значенням d.
4. Опис основних модулів і функцій програми
Основою мережевого взаємодії в програмі є клас Network. Наведемо список основних команд, на основі яких будується все мережеве взаємодія між клієнтами програмами. У класі вони представлені у вигляді глобальних змінних:
/**
* Ідентифікатор команди "маячка". Передається для
* обозначаніе, що клієнт в мережі.
* Приклад: PRSN
*/static final String CMD_PRESENT = "PRSN";
/**
* Ідентифікатор команди зміни ніка.
* Приклад: NICK: nick
*/static final String CMD_NICK = "NICK";
/**
* Ідентифікатор команди синхронізації. У команді
* передається список ...