Забезпечення інформаційної безпеки

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

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык украинский
Дата добавления 28.07.2017
Размер файла 91,2 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

x +1 = {M Ч xn}, n = 0,1,K,

де M - довільне натуральне число,

0 x - довільне фіксоване число із інтервалу (0,1). Наприклад, при M=7 і x 0 = 0.319 отримуємо: 0.319, 0.233, 0.631, 0.417, … .

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

x n+1 = {x n + a}, n = 0,1,K,

де x 0 ,a - довільні фіксовані числа із інтервалу (0,1).

Наприклад, при a=0.645 і x 0 = 0.319 отримуємо: 0.964, 0.609, 0.254, 0.899, … .

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

x n+1 = {nЧ a}, n = 0,1,K,

де a - довільне фіксоване число із інтервалу (0,1).

Наприклад, при a=0.645 отримуємо: 0, 0.645, 0.290, 0.935, … .

Як було доведено теоремою Германа Вейля, послідовність псевдовипадкових чисел, побудована за алгоритмом 2.3, рівномірно розподілена на інтервалі (0,1) для довільного ірраціонального aО(0,1).

Отримані послідовності можна розглядати як послідовності псевдовипадкових цілих чисел. Наприклад, для алгоритму 2.1 така послідовність матиме вигляд 319, 233, 631, 417, … .

Їх можна розглядати також як послідовності псевдовипадкових десяткових цифр. Наприклад, для того ж самого алгоритму 2.1 матимемо 319233631417… . Врешті решт, якщо цілі числа перетворити до двійкової системи численя, то отримаємо послідовність псевдовипадкових двійкових цифр 100111111011101001001001100111110100001. Зауважимо все ж таки, що якість таких послідовностей з точки зору їх випадковості вимагає дослідження.

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

Виберемо довільне шестирозрядне число 678542, піднесемо його до квадрату і отримаємо 460419245764. Виділимо із середини отриманого числа шестирозрядне число 419245, піднесемо його до квадрату і т.д. Таким шляхом утворюється послідовність псевдовипадковихМоргун О.М. Кріптографічні методи захисту інформації. 3 чисел, в якій кожне наступне число визначається попереднім: 678542, 419245, 766370, 322976, 313496, 279742, 255586, 324203, 107585, … .

На жаль, внаслідок проведених досліджень методу середини квадрату виявилось, що він не є надійним джерелом псевдовипадкових чисел. В більшості випадків послідовності мають властивість перетворюватись в короткі цикли повторюваних чисел або вироджуватись в нулі. Наприклад, якщо працювати з двохрозрядними числами, то можна отримати наступну послідовність: 42, 76, 77, 92, 46, 11, 12, 14, 19, 36, 29, 84, 05, 02, 00, … . Ще один цікавий приклад пов'язаний з використанням чотирьохрозрядного числа 3792, яке не утворює псевдовипадкової послідовності, а лише самовідтворюється, тобто 3792*3792 = 14379264.

Лінійний конгруентний метод цей метод утворення послідовності псевдовипадкових чисел теоретично гарантує збереження певних властивостей послідовностей дійсно випадкових чисел, а також відсутність виродження. Схему лінійного конгруентного методу запропонував Д.Х. Лемер у 1946 році. Математично метод має вигляд співвідношення x

n+1 = (a Ч x n + b) mod m, n = 0,1,K

параметрами якого є 0 x - початкове значення, a - множник, b - приріст, m - модуль. Указані числа мають природні обмеження, а саме: модуль m - ціле додатнє число, числа 0 x , a і b - цілі, невід'ємні і менші модуля m .

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

Розглянемо наступний приклад. Нехай параметри x

0 = a = b = 7 , m = 10 . Тоді, застосовуючи співвідношення методу, отримаємо послідовність 7, 6, 9, 0, 7, 6, 9, 0, 7, … . Тут послідовність псевдовипадкових чисел має період, рівний 4, який є занадто коротким у порівнянні з m = 10 .

Розглянемо ще один приклад. Нехай параметри x

0 = a = b = 1, m = 5 . Тоді, застосовуючи співвідношення методу, отримаємо послідовність 1, 2, 3, 4, 0, 1, 2, 3, 4, 0, … . Тут послідовність чисел має найбільший можливий період, рівний 5. Але назвати таку послідовність псевдовипадковою не можна.

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

1). Значення модуля m має бути досить великим, щоб було можливо отримувати більші значення періоду. Доцільно вибирати значення m рівними степеням двійки, тобто виду k 2 .

2). Числа a і m - взаємно прості, числа b і m - теж взаємно прості. Тобто мають задовольнятись умови НСД(a,m) = 1 і НСД(b,m) = 1 .

3). Початкове значення

0 x - довільне, що задовольняє умовам 0 Ј x 0 < m .У відповідності з наведеними рекомендаціями виберемо m = 8 , a = 5 , b =7 , x 0 = 1. Отримуємо наступну послідовність псевдовипадкових чисел: 1, 4, 3, 6, 5, 0, 7, 2. Перід послідовності рівний 8, тобто максимальний. Сама послідовність має вигляд випадкової. Із таких послідовностей псевдовипадкових десяткових чисел дуже зручно отримувати послідовності псевдовипадкових двійкових чисел. Оскільки k m = 2 , то для цього кожне десяткове число треба представити як k - розрядне двійкове. Так, для попереднього прикладу отримаємо послідовність 001100011110101000111010.

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

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

3.2 Методи кодування та захисту інформації

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

Дублювання інформації є одним з найефективніших способів забезпечення цілісності інформації. Воно забезпечує захист інформації, як від випадкових загроз, так і від навмисних впливів. Для дублювання інформації можуть застосовуватися не тільки незнімні носії інформації або спеціально розроблені для цього пристрою, а й звичайні пристрої зі знімними машинними носіями. Поширеними методами дублювання даних в КС є використання виділених областей пам'яті на робочому диску і дзеркальних дисків (жорсткий диск з інформацією, ідентичною як на робочому диску). Під надійністю розуміється властивість системи виконувати покладені на неї функції у певних умовах обслуговування і експлуатації [7; 77]. Надійність КС досягається на етапах розробки, виробництва, експлуатації. Важливим напрямком у забезпеченні надійності КС є своєчасне виявлення і локалізація можливих несправностей в роботі її технічних засобів. Значно скоротити можливості внесення суб'єктивних помилок розробників дозволяють сучасні технології програмування. Відмовостійкість - це властивість КС зберігати працездатність при відмовах окремих пристроїв, блоків, схем. Відомі три основних підходи до створення відмовостійких систем: просте резервування (використання пристроїв, блоків, вузлів, схем, тільки в якості резервних); завадостійке кодування інформації (робоча інформація доповнюється спеціальної контрольної інформацією-кодом, яка дозволяє визначати помилки і виправляти їх), створення адаптивних систем, що передбачають збереження працездатного стану КС при деякому зниженні ефективності функціонування у випадках відмов елементів. Блокування помилкових операцій. Помилкові операції в роботі КС можуть бути викликані не тільки випадковими відмовами технічних і програмних засобів, але і помилками користувачів та обслуговуючого персоналу. Для блокування помилкових дій використовуються технічні та апаратно-програмні засоби, такі як блокувальні тумблери, запобіжники, засоби блокування запису на магнітні диски та інші. Оптимізація. Одним з основних напрямків захисту інформації є скорочення числа помилок користувачів і персоналу, а також мінімізація наслідків цих помилок. Для досягнення цих цілей необхідні: наукова організація праці, виховання і навчання користувачів і персоналу, аналіз та вдосконалення процесів взаємодії людини і КС .

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

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

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

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

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

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

Антивірусна програма - частина програмного забезпечення, яка встановлюється на комп'ютер, щоб шукати на дисках і у вхідних файлах комп'ютерні віруси і видаляти їх при виявленні [1; 414]. Програма виявляє віруси, пропонуючи вилікувати файли, а при неможливості видалити. Існує кілька різновидів антивірусних програм: - Сканери або програми-фаги - це програми пошуку в файлах, пам'яті, завантажувальних секторах дисків сигнатур вірусів (унікального програмного коду саме цього вірусу), перевіряють і лікують файли; - Монітори (різновид сканерів) - перевіряють оперативну пам'ять при завантаженні операційної системи, автоматично перевіряють усі файли в момент їх відкриття і закриття, щоб не допустити відкриття та запис файлу, зараженого вірусом; блокує віруси;

- Іммунізатори - запобігають зараженню файлів, виявляють підозрілі дії при роботі комп'ютера, характерні для вірусу на ранній стадії (до розмноження) і посилають користувачеві відповідне повідомлення;

- Ревізори - запам'ятовують початковий стан програм, каталогів до зараження і періодично (або за бажанням користувача) порівнюють поточний стан із вихідним; - Доктора - не тільки знаходять заражені вірусами файли, ні і "лікують" їх, тобто видаляють з файлу тіло програми-вірусу, повертаючи файли в початковий стан;

- Блокувальники - відстежують події і перехоплюють підозрілі дії (вироблені шкідливою програмою), забороняють дію або запитують дозвіл користувача. 3.3 Криптографічні методи захисту інформації та міжмережеві екрани Ефективним засобом протидії різним загрозам інформаційної безпеки є закриття інформації методами криптографічного (від грец. Kryptos - таємний) перетворення.У результа-ті такого перетворення захищається інформація стає недоступною для ознайомлення і безпосереднього використання особами, що не мають на це повноважень. По виду впливу на вихідну інформацію криптографічні методи розділені на наступні види. Шифрування - процес маскування повідомлень або даних з метою приховування їх змісту, обмеження доступу до змісту інших осіб. Полягає в проведенні оборотних математичних, логічних, комбінаторних та інших перетворень вихідної інформації, в результаті яких зашифрована інформація являє собою хаотичний набір букв, цифр, інших символів і двійкових кодів. Для шифрування використовуються алгоритм перетворення і ключ. Стеганографія - метод захисту комп'ютерних даних, переданих по каналах телекомунікацій, шляхом приховування повідомлення серед відкритого тексту, зображення або звуку у файлі-контейнері. Дозволяє приховати не тільки зміст зберігається або передається, а й сам факт зберігання або передачі закритої інформації. Прихований файл може бути зашифрований. Якщо хтось випадково виявить прихований файл, то зашифрована інформація буде сприйнята як збій у роботі системи. Кодування - заміна смислових конструкцій вихідної інформації (слів, речень) кодами. Як кодів можуть використовуватися поєднання букв, цифр. При кодуванні і зворотному перетворенні використовуються спеціальні таблиці або словники, що зберігаються в секреті. Кодування широко використовується для захисту інформації від спотворень в каналах зв'язку. Метою стиснення інформації є скорочення обсягів інформації. У той же час стисла інформація не може бути прочитана чи використана без зворотного перетворення.Враховуючи доступність засобів стиснення і зворотного перетворення, ці методи не можна розглядати як надійні засоби криптографічного перетворення інформації.Тому стислі файли піддаються подальшому шифрування. Розсічення-рознесення полягає в тому, що масив даних, що захищаються ділиться (розтинають) на такі елементи, кожен з яких окремо не дозволяє розкрити зміст інформації, що захищається. Виділені таким чином елементи даних розносяться по різних зонах ЗУ або розташовуються на різних носіях. Електронний цифровий підпис (ЕЦП) є рядок даних, яка залежить від деякого секретного параметра (ключа), відомого тільки підписувачу особі, і від змісту підписується повідомлення, представленого в цифровому вигляді.Використовується для підтвердження цілісності та авторства даних, не можна змінити документ без порушення цілісності підпису. Для блокування загроз, що виходять з загальнодоступної системи, використовується спеціальне програмне чи апаратно-програмний засіб, яке отримало назву міжмережевий екран (МЕ) або fire wall. МЕ дозволяє розділити загальну мережу на дві частини або більше і реалізувати набір правил, що визначають умови проходження пакетів з даними через кордон з однієї частини загальної мережі в іншу. Іноді мережева захист повністю блокує трафік зовні всередину, але дозволяє внутрішнім користувачам вільно зв'язуватися із зовнішнім світом. Зазвичай МЕ захищають внутрішню мережу підприємства від вторгнень з глобальної мережі Інтернет. Брандмауер виконує чотири основні функції: - Фільтрація даних на різних рівнях;

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

4. РОЗРОБКА ТА ПРОГРАМУВАННЯ ІНФОРМАЦІЙНОЇ СИСТЕМИ

4.1 Розробка ТСР серверу

Transmission Control Protocol (TCP) (протокол управління передачею) - один з основних мережевих протоколів Інтернету, призначений для управління передачею даних в мережах і підмережах TCP / IP. Виконує функції протоколу транспортного рівня моделі OSI. TCP - це транспортний механізм, що надає потік даних, з попередньою установкою з'єднання, за рахунок цього дає впевненість у достовірності одержуваних даних, здійснює повторний запит даних у разі втрати даних і усуває дублювання при отриманні двох копій одного пакета (див. також T / TCP) . На відміну від UDP гарантує цілісність переданих даних і повідомлення відправника про результати передачі. Реалізація TCP, як правило, вбудована в ядро ОС, хоча є й реалізації TCP контексті програми.Коли здійснюється передача від комп'ютера до комп'ютера через Інтернет, TCP працює на верхньому рівні між двома кінцевими системами, наприклад, браузером і веб-сервером. Також TCP здійснює надійну передачу потоку байтів від однієї програми на деякому комп'ютері до іншої програмі на іншому комп'ютері. Програми для електронної пошти і обміну файлами використовують TCP. TCP контролює довжину повідомлення, швидкість обміну повідомленнями, мережевий трафік. При обміні даними приймач використовує номер послідовності, який міститься в одержуваних сегментах, для відновлення їх початкового порядку. Приймач повідомляє передавальну сторону про номер послідовності байт, до якої він успішно отримав дані, включаючи його в поле «номер підтвердження». Всі одержані дані, пов'язані з проміжку підтверджених послідовностей, ігноруються.Якщо отриманий сегмент містить номер послідовності більший, ніж очікуваний, то дані з сегмента буферизирует, але номер підтвердженої послідовності не змінюється. Якщо згодом буде прийнятий сегмент, що відноситься до очікуваного номером послідовності, то порядок даних буде автоматично відновлено виходячи з номерів послідовностей в сегментах. Для того, щоб передавальна сторона не відправляла дані інтенсивніше, ніж їх може обробити приймач, TCP містить засоби управління потоком. Для цього використовується поле «вікно». У сегментах, що направляються від приймача передавальній стороні в поле «вікно» вказується поточний розмір приймального буфера. Передавальна сторона зберігає розмір вікна і відправляє даних не більше, ніж вказав приймач. Якщо приймач вказав нульовий розмір вікна, то передача даних в напрямку цього вузла не відбувається, до тих пір поки приймач не повідомить про більшому розмірі вікна. В деяких випадках передавальний додаток може явно зажадати проштовхнути дані до деякої послідовності приймає додатком, не буферизируя їх. Для цього використовується прапор PSH. Якщо в отриманому сегменті виявляється прапор PSH, то реалізація TCP віддає все буферізірованний на поточний момент дані приймає додатком. «Проштовхування» використовується, наприклад, в інтерактивних програмах. У мережевих терміналах немає сенсу чекати введення користувача після того, як він закінчив набирати команду. Тому останній сегмент, що містить команду, зобов'язаний утримувати прапор PSH, щоб додаток на приймаючій стороні змогло розпочати її виконання.

Створення ТСР серверу функція старт

void Server::start()

{

if (!listen(QHostAddress::LocalHost, 8080))

emit addLogMessage("can`t start server at localhost:8080");

else

emit addLogMessage("Server successfuly started at localhost:8080");

}

void Server::incomingConnection(int handle)

{

if (!firstClient){

firstClient = new Socket(this);

firstClient->setSocketDescriptor(handle);

firstClient->setType(Server::FirstClient);

}else if (!secondClient){

secondClient = new Socket(this);

secondClient->setSocketDescriptor(handle);

secondClient->setType(Server::SecondClient);

firstClient->setChatClient(secondClient);

secondClient->setChatClient(firstClient);

}else

emit addLogMessage("Another one user try to connect to ChatCrypto");

}

ТСР протокол

#ifndef DEFINES_H

#define DEFINES_H

#define client_hello 1

#define server_hello 2

#define client_send_msg 3

#endif // DEFINES_H

Протокол управління передачею даних в DoD стандарті (TCP). Даний стандартгрунтується на дев'яти попередніх виданнях ARPA специфікації TCP, даний текстсильно відрізняється від них. В нього внесені великі зміни як щодо концепцій, так і щодо тексту. Дане видання прояснює деякі деталі протоколу і не включаєвирівнювання за розміром буфера в кінці листа, а також перевизначає механізмлистів як push функцію.

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

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

В умовах, коли стратегічні і тактичні мережі комп'ютерних комунікацій виникають і зникають, важливо забезпечити кошти для їх зі єднання, а також стандартні протоколи комунікації між процесами, які б підтримували великий діапазон прикладних програм. Передбачаючи потребу в таких стандартах, Представництво Секретаріату Оборони з науково-дослідним і дослідно-конструкторських робіт пред'явило протокол управління передачею (Transmission Control Protocol - TCP), описаний тут, на основі стандартизації DoD протоколу комунікацій між процесами.

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

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

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

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

Як зазначалося раніше, головною метою протоколу TCP є забезпечення надійного, безпечного сервісу для логічних ланцюгів чи з'єднань між парами процесів. Щоб забезпечити такий сервіс, базуючись на менш надійних комунікаціях Internet, система повинна мати можливості для роботи в наступних областях: базова передача даних достовірність управління потоком поділ каналів робота із з'єднаннями пріоритет і безпека Основні дії протоколу TCP у кожній з цих областей описані у наступних параграфах. Базова передача даних Протокол TCP здатний передавати неперервні потоки октетів між своїми клієнтами в обох напрямках, пакуючи деяку кількість октетів у сегменти для передачі через системи Internet. У загальному випадку протоколи TCP вирішують за своїм розсудом, коли проводити блокування та передачу даних. Іноді користувачам буває необхідно переконатися в тому, що всі дані, передані ними протоколу TCP, вже відправлені. Для цієї мети визначена функція проштовхування (push). Щоб переконатися в тому, що дані, відправлені протоколу TCP, дійсно передані, відправник вказує, що їх слід проштовхнути до одержувача. Проштовхування призводить до того, що програми протоколу TCP одразу здійснюють відправлення і, відповідно, отримання залишаються даних. Правильно здійснене проштовхування може бути невидиме для отримувача, а сама функція проштовхування може не мати маркера межі запису. Достовірність Протокол TCP повинен мати захист від руйнування даних, втрати, дублювання та порушення черговості отримання, викликаних комунікаційною системою Internet. Це досягається присвоєнням чергового номера кожному переданому октету, а також вимогою підтвердження (ACK) від програми TCP, яка приймає дані. Якщо підтвердження не отримано протягом контрольного інтервалу часу, то дані посилаються повторно. З боку отримувача номери черги використовуються для відновлення черговості сегментів, які можуть бути отримані у неправильному порядку, а також для обмеження можливості появи дублікатів. Пошкодження фіксуються за допомогою додавання до кожного переданому сегменту контрольної суми, перевірки її при отриманні і подальшої ліквідації дефектних сегментів. До тих пір, поки програми протоколу TCP продовжують функціонувати коректно, а система Internet не розвалилася повністю на складові частини, помилки пересилання не впливатимуть на правильне одержання даних. Протокол TCP захищає від помилок комунікаційної системи Internet. Управління потоком Протокол TCP дає кошти одержувачу керувати кількістю даних, що посилаються йому відправником. Це досягається поверненням так званого "вікна" (window) разом з кожним підтвердженням, яке вказує діапазон прийнятних номерів, наступних за номером останнього успішно прийнятого сегменту. Вікно визначає кількість октетів, яке відправник може послати до отримання подальших вказівок. Поділ каналів Щоб дозволити на окремо взятому комп'ютері багатьом процесам одночасно використовувати комунікаційні можливості рівня TCP, протокол TCP надає на кожному хост-комп'ютері набір адрес чи портів. Разом з адресами мереж та хост-комп'ютерів на комунікаційному рівні Internet вони утворюють сокет (socket - роз'єм). Кожне з'єднання унікальним чином ідентифікується парою сокетів. Таким чином, будь-який сокет може одночасно використовуватися в багатьох з'єднаннях. Співвіднесення портів та процесів здійснюється кожним хост-комп'ютером самостійно. Проте виявляється корисним зв'язувати часто використовувані процеси (такі як "logger" чи сервіс з розподіленням часу) з фіксованими документованими сокетами. Цей сервіс можна згодом використовувати через відомі адреси. Установка і настройка адрес портів для інших процесів може включати більш динамічні механізми.Робота з сполуками. Механізми управління потоком та забезпечення достовірності, описані вище, вимагають, щоб програми протоколу TCP ініціалізували та підтримували певну інформацію про стан кожного потоку даних. Набір такої інформації, що включає сокети, номери черги, розміри вікон, називається з'єднанням. Кожне з'єднання унікальним чином ідентифікується парою сокетів на двох кінцях. Якщо два процеси бажають обмінюватись інформацією, відповідні програми протоколу TCP повинні спочатку встановити з'єднання (на кожному боці ініціалізувати інформацію про статус). По завершенні обміну інформацією з'єднання повинно бути розірвано або закрито, щоб звільнити ресурси для надання іншим користувачам. Оскільки з'єднання повинні встановлюватися між ненадійними хост-комп'ютерами та через ненадійну комунікаційну систему Internet, то щоб уникнути помилкової ініціалізації з'єднань використовується механізм підтвердження зв'язку з хронометрувати номерами черги. Пріоритет і безпека Користувачі протоколу TCP можуть вимагати для свого з'єднання пріоритет і безпеку. Передбачені прийняті за замовчанням характеристики з'єднань, коли такі параметри не потрібні.

Набір даних, переданих по з'єднанню, можна розглядати як потік октетів.Користувач, що відправляє дані, вказує при запиті по посилку, чи дані, що відправляються при цьому запиті, негайно проштовхувати через мережу до одержувача. Вказівка здійснюється установкою прапора PUSH (проштовхування). Програма протоколу TCP може збирати дані, що приймаються від користувача, а потім передавати їх в мережу на свій розсуд у вигляді сегментів. Якщо ж виставлений запит на проштовхування, то протокол має передати все не відправлені раніше дані. Коли програма протоколу TCP, яка приймає дані, стикається з прапором проштовхування, їй не слід очікувати отримання нових даних по мережі до тих пір, поки вже наявні дані не будуть передані що чекає їх місцевим процесу. Немає потреби прив'язувати функції проштовхування до кордонів сегмента. Дані, що містяться в будь-якому сегменті, можуть бути результатом одного або кількох запитів на посилку. Або ж один запит може породити декілька сегментів. Метою функції проштовхування і прапора PUSH є проштовхування даних через мережу від відправника до одержувача. Функція не здійснює обробки самих даних. Існує зв'язок між функцією проштовхування та використанням буферів даних в інтерфейсі між користувачем і протоколом TCP. Кожен раз, коли в буфер одержувача приходять дані з прапором PUSH, вміст цього буфера передається користувачеві на обробку, навіть якщо буфер і не був заповнений. Якщо приходять дані заповнюють буфер користувача до того, як отримана команда проштовхування, користувачеві відправляється блок даних, відповідний розміру буфера. Протокол TCP має також засоби для повідомлення одержувачу, що з деякого моменту він має справу з терміновими даними. Протокол TCP не намагається визначити, що саме користувач робить зі чекають обробки терміновими даними. Проте зазвичай передбачається, що одержує дані процес буде робити зусилля для швидкої обробки строкових даних. Пріоритет і безпека протокол TCP використовує тип сервісу і опцію безпеки протоколу Internet з тим, щоб користувачам протоколу TCP забезпечити пріоритет і безпеку на кожному з'єднанні. Не всі модулі протоколу TCP обов'язково будуть діяти в багаторівневою системою забезпечення безпеки. Деякі модулі обмежуються тільки звичайними, неспецифічними сполуками, інші обмежуються лише першим рівнем безпеки та закритості. Отже, деякі реалізації протоколу TCP і послуг для користувачів можуть використовувати лише частина багаторівневої системи безпеки. Модулі TCP, що діють в багаторівневою системою безпеки, повинні адекватно виставляти в відсилаються сегментах прапори безпеки і пріоритету. Такі модулі TCP повинні також дозволяти своїм клієнтам або вищестоящим протоколам, таким як Telnet і THP, вказувати необхідний рівень безпеки, закритості і пріоритету для встановлюваних сполук.

4.2 TCP протокол та обмін данними

У змінній server_status - зберігається статус QTcpServer, щоб не відбувалося ексцесівпри роботі сервера (якщо 0 - то сервер не слухає порт, 1 - слухає). Сигнали в даному випадку вирішують зайвий раз проблему з прослуховуван ямпорту, тобто слот newuser () в даний момент викликається тільки тоді, колиз'являється нове підключення до сервера.

tcpServer = new QTcpServer(this);

connect(tcpServer, SIGNAL(newConnection()), this, SLOT(newuser()));

if (!tcpServer->listen(QHostAddress::Any, 33333) && server_status==0)

{

qDebug() << QObject::tr("Unable to start the server: %1.").arg(tcpServer->errorString()); } else { server_status=1; qDebug() << QString::fromUtf8("Сервер запущен!");

}

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

if (server_status == 1) { qDebug () << QString :: fromUtf8 ("У нас нове з'єднання!"); QTcpSocket * clientSocket = tcpServer-> nextPendingConnection (); int idusersocs = clientSocket-> socketDescriptor (); SClients [idusersocs] = clientSocket; connect (SClients [idusersocs], SIGNAL (readyRead ()), this, SLOT (slotReadClient ())); } QMap <int,QTcpSocket *> SClients;

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

if (server_status == 1) {

foreach (int i, SClients.keys ()) {

QTextStream os (SClients [i]);

os.setAutoDetectUnicode (true);

os << QDateTime :: currentDateTime (). toString () << "\ n";

SClients [i] -> close ();

SClients.remove (i);

} tcpServer-> close ();

qDebug () << QString :: fromUtf8 ("Сервер зупинений!");

server_status = 0;

}

При створенні нового сокета сигнал readyRead (), він виконується коли клієнт передає якісь дані на наш сервер, в цей момент ми і будемо давати відповідь нашому клієнтові, попередньо отримавши дані.

QTcpSocket * clientSocket = (QTcpSocket *) sender ();

int idusersocs = clientSocket-> socketDescriptor ();

QTextStream os (clientSocket);

os.setAutoDetectUnicode (true);

os << "HTTP/1.0 200 Ok \ r \ n"

"Content-Type: text / html; charset = \" utf-8 \ "\ r \ n"

"\ R \ n"

"<h1> Nothing to see here </ h1> \ n"

<< QDateTime :: currentDateTime (). ToString () << "\ n";

qDebug () << clientSocket-> readAll () + "\ n \ r");

clientSocket-> close ();

SClients.remove (idusersocs);

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

4.3 ТСР клієнт

Client показує, як створити клієнта для простої сервіс мережі за допомогою QTcpSocket. Наприклад призначений для одночасного запуску з прикладом Fortune Server аборізьбові приклад сервера Fortune. У цьому прикладі використовується проста QDataStream на основі протоколупередачі даних для запиту рядки тексту зі стану сервера (на прикладі сервераFortune). Клієнт запитує стан, просто підключивши до сервера. Потім сервервідповідає 16-бітний (quint16) ціле число, що містить довжину стан тексту, а потімQString. QTcpSocket підтримує два основних підходи до мережного програмування:Асинхронний (без блокування) підхід. Операції плануються і виконуються, коли управління повернеться до циклу подій Qt. Коли операція закінчиться, QTcpSocketвипромінює сигнал. Наприклад, QTcpSocket :: connectToHost () повертає відразу, аколи'єднання встановлено, QTcpSocket випромінює connected (). Синхронний (блокування) підхід. У не GUI і багатопоточних додатків, ви можетезателефонувати WaitFor ... () функції (наприклад, QTcpSocket :: waitForConnected ()) припиняти викликає потік до завершення операції, а підключення до сигналів. У цьому прикладі ми покажемо, асинхронний підхід. Блокування наприклад Fortune Client показує синхронний підхід. Наш клас містить деякі дані, а також декілька приватних слотів:

class Client : public QDialog

{

Q_OBJECT

public:

Client(QWidget *parent = 0);

private slots:

void requestNewFortune();

void readFortune();

void displayError(QAbstractSocket::SocketError socketError);

void enableGetFortuneButton();

void sessionOpened();

Крім віджетів, які становлять графічний інтерфейс користувача, дані входять QTcpSocket покажчик, копія тексту в даний час стан відображається, і розмір пакету, ми в даний час читання (докладніше про це пізніше). Гніздо ініціалізується в конструкторі клієнта. Ми будемо проходити головний віджет, як батьків, так що нам не доведеться турбуватися про видалення гнізда:

Client :: Client (QWidget * батько)

: QDialog (батька), networkSession (0)

{ TcpSocket = новий QTcpSocket (це);

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

connect (TcpSocket, SIGNAL (readyRead ()), це, SLOT (readFortune ())); connect (TcpSocket, SIGNAL (помилки (QAbstractSocket :: SocketError)); }

Натискання кнопки Get Фортуна викличе requestNewFortune () слот:

void Client :: requestNewFortune ()

{ getFortuneButton-> setEnabled (помилковий);

BLOCKSIZE = 0;

TcpSocket-> перервати ();

TcpSocket-> connectToHost (hostLineEdit-> текст ()

PortLineEdit-> Текст () toInt ());

}

В цей слот ми инициализируем блоку 0, готуючись читати новий блок даних. Тому що ми дозволяємо користувачеві натисніть кнопку Отримати удачі перед попереднім закриттям зв'язку закінчена, ми почнемо переривання попереднього з'єднання, викликавши QTcpSocket :: Abort (). (На незв'язаних гніздо, ця функція нічого не робить.) Потім ми підключенні до сервера стан, викликавши QTcpSocket :: connectToHost (), передавши ім'я хоста і порт з користувальницького інтерфейсу в якості аргументу. В результаті виклику connectToHost (), одна з двох речей може відбутися: З'єднання встановлено. У цьому випадку сервер буде посилати нам удачу.QTcpSocket видасть readyRead () кожен раз, коли вона отримує блок даних. Помилка. Нам потрібно, щоб повідомити користувачеві, якщо з'єднання не вдалося або була порушена. В цьому випадку, QTcpSocket видасть помилку () і Client :: DisplayError () буде викликаний. Давайте пройдемося по помилку () випадок перший:

Ми видаляємо всі помилки в діалог з допомогою QMessageBox :: Information ().QTcpSocket :: RemoteHostClosedError ігнорується, так як протокол стану серверазакінчується на сервер закриває з'єднання. Тепер для альтернативних readyRead (). Цей сигнал пов'язаний з

Client ::readFortune (): void Client :: readFortune ()

{ QDataStream в (TcpSocket);

in.setVersion (QDataStream :: Qt_4_0); if(bloc.size() == 0) {

if (TcpSocket-> bytesAvailable () <(INT) SizeOf (quint16))

return; in block >>; } if (TcpSocket-> bytesAvailable () < quint16)

Протокол заснований на QDataStream, тому ми почнемо з створення об'єктапотоку, передаючи сокет конструктор QDataStream в. Ми потім явно задатипротокол версії потік QDataStream :: Qt_4_0, щоб ми використовуємо ту ж версію, стан сервера, незалежно від того, яка версія Qt клієнт і сервер використовують.

Тепер TCP заснований на відправку потоку даних, тому ми не можемо чекати, щоботримати всі свої статки за один раз. Особливо на повільну мережу, то дані можутьбути отримані в декількох невеликих фрагментів. QTcpSocket буфери всі вступникидані і видає readyRead () для кожного bнового блоку, який прибуває, і це нашаробота, щоб ми отримали всі дані, ми повинні, перш ніж почати аналіз. Відповідьсервера починається з розміру пакета, так що спочатку ми повинні переконатися, що ми можемо прочитати розмір, то ми будемо чекати, поки QTcpSocket отримавповний пакет. QString nextFortune;

В >> nextFortune; if (nextFortune == currentFortune) {

QTimer :: Singleshot (0, то це, SLOT (requestNewFortune ())); повернутися; } currentFortune = nextFortune; statusLabel-> зейТех (currentFortune); getFortuneButton-> setEnabled (правда); }

Виходимо з допомогою потокових операторів QDataStream на читання долі зрозетки в QString. Після прочитання можна назвати QLabel :: зейТех () длявідображення стану.

4.4 Розробка методу захисту данних

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

int check_size;

check_size = data.size() % double_key.size();

qDebug() << "check_data = " << check_size;

QStringList iterationKeys = double_key.split("#");

QString DataEncript;

int cript_app = 0;

for (int i = 0; i < iterationKeys.size(); ++i)

{

QString keyBlock = iterationKeys.at(i);

for (int j = 0; j < keyBlock.size(); ++j)

cript_app += keyBlock.at(j).ByteArray;

}

QString tep,complite_data;

for (int ix = 0; ix < data.size(); ++ix)

{

temp = data.at(ix);

complite_data.push_back(tep);

}

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

for(int ix = 0; ix < complite_data.size(); ++ix)

{

QString swap,swop;

int center_data;

center_data = complite_data.size()/2;

swap = complite_data.mid(center_data,ix);

swop = complite_data[center_data - ix];

complite_data.insert(ix,swop);

complite_data.insert(complite_data.size() - ix,swap);

}

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

QString alphaG = "aei ouy ", alphaS = "bcdfghjklm npqrstvwxz ";

QString genTExt;

int startPos, nextPos;

for(int ix = 0; ix < size; ++ix)

{

startPos = rand()%alphaS.size();

nextPos = rand()%alphaG.size();

genTExt.push_back(alphaS.at(startPos));

genTExt.push_back(alphaG.at(nextPos));

}

qDebug() << "gentext" << genTExt;

QString temp1,tem1;

genTExt = genTExt + data;

int sumSize = genTExt.size() + data.size();

for(int ix = 0; ix < sumSize; ++ix)

{

temp1 = genTExt[ix];

tem1 = genTExt[data.size() - 1];

genTExt.push_back(temp1);

genTExt.push_back(tem1);

}

qDebug() << "data" << genTExt;

qDebug() << "gen text" << genTExt;

QByteArray може бути використаний для зберігання як сирих байт (включаючи і '\ 0'), так і традиційних 8-бітних нуль-терминирования рядків. Використання QByteArray зручніше, ніж використання const char *. Тут завжди гарантовано, що дані завершуються '\ 0' і використовується неявне спільне використання даних (copy-on-write) для економії пам'яті та уникнення непотрібного копіювання даних. На додаток до QByteArray Qt також надає клас QString для зберігання строкових даних. У більшості випадків вам більше підійде клас QString. Він зберігає 16-бітові символи в Unicode, що спрощує зберігання не-ASCII і нелатинських символів у вашому додатку. Крім того, QString всюди використовується в Qt API. Два основних випадку, де QByteArray підходить - це, коли вам потрібно зберегти сирі двійкові дані, і коли критично збереження пам'яті (наприклад, в Qt для Embedded Linux). Один із способів ініціалізації QByteArray - просто передати const char * в конструктор. Наприклад, наступний код створює масив з 5 байт, що містить дані "Hello": QByteArray ba ("Hello"); Незважаючи на те, що size () дорівнює 5, байтовий масив також містить в кінці додатковий символ '\ 0', так що, якщо використовується функція, що вимагає покажчик безпосередньо на дані (тобто виклик data ()), то ці дані будуть гарантовано закінчуватися '\ 0'. QByteArray робить повну копію даних const char *, так що ви можете модифікувати їх, не отримавши надалі побічних ефектів. (Якщо, з міркування продуктивності, ви не хочете робити повне копіювання даних, використовуйте QByteArray :: fromRawData ().) Інший спосіб - встановити розмір масиву, використовуючи resize () і ініціалізувати дані побайтно. QByteArray використовує індекси починаються з 0, як прийнято в масивах C + +. Для доступу до байту в конкретній позиції індексу, ви можете використовувати оператор [] (). В неконстантних масивах оператор [] () повертає посилання на байт, яка може бути використана з лівого боку операції присвоювання. Наприклад:

QByteArray ba;

ba.resize (5);

ba [0] = 0x3c;

ba [1] = 0xb8;

ba [2] = 0x64;

ba [3] = 0x18;

ba [4] = 0xca;

Для доступу "тільки для читання", існує альтернативний синтаксис

at (): for (int i = 0; i <ba.size (); + + i) {

if (ba.at (i)> = 'a' && ba.at (i) <= 'f')

cout << "Found character in range [a-f]" << endl;

}

at ()

може працювати швидше, ніж оператор [] (), тому що при цьому ніколи не створюється повної копії. Щоб отримати кілька байт за раз використовуйте left (), right () або mid (). QByteArray може вміщати байти '\ 0'. Функція size () завжди повертає розмір всього масиву, включаючи вставлені '\ 0'. Якщо ви хочете отримати довжину даних аж до першого символу '\ 0', але не включаючи його, викличте для масиву qstrlen (). Після виклику resize (), додані байти будуть містити невизначені значення. Щоб проініціалізувати всі байти певним значенням, викличте fill (). Щоб отримати покажчик безпосередньо на символьні дані, викличте data () або constData (). Ці функції повертають покажчик на початок даних. Покажчик гарантовано залишається правильним до тих пір, поки не буде викликана неконстантная функція на QByteArray. Також гарантується, що дані закінчуються байтом '\ 0'. Цей байт '\ 0' автоматично надається класом QByteArray і не враховується в size (). QByteArray надає наступні основні функції для модифікації байт даних: append (), prepend (), insert (), replace () і remove (). Наприклад: QByteArray x ("and");


Подобные документы

  • Аналіз системи збору первинної інформації та розробка структури керуючої ЕОМ АСУ ТП. Розробка апаратного забезпечення інформаційних каналів, структури програмного забезпечення. Алгоритми системного програмного забезпечення. Опис програмних модулів.

    дипломная работа [1,9 M], добавлен 19.08.2012

  • Криптографія – математичні методи забезпечення інформаційної безпеки та захисту конфіденційності. Огляд існуючих методів пошуку нових алгоритмів шифрування. Розробка системи оцінки ефективності криптографічних систем. Найпоширеніші методи шифрування.

    дипломная работа [1,2 M], добавлен 13.06.2015

  • Аналіз предметної області, опис проекту бази даних, моделей майбутнього програмного забезпечення гри для персонального комп'ютера "Міста". Функціональні можливості програмного забезпечення, які необхідно реалізувати. Інтерфейс програмного забезпечення.

    курсовая работа [2,3 M], добавлен 02.06.2016

  • Основи безпеки даних в комп'ютерних системах. Розробка програми для забезпечення захисту інформації від несанкціонованого доступу: шифрування та дешифрування даних за допомогою криптографічних алгоритмів RSA та DES. Проблеми і перспективи криптографії.

    дипломная работа [823,1 K], добавлен 11.01.2011

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

    курсовая работа [1,5 M], добавлен 22.04.2011

  • Структура інформаційної системи КККЕіП ім. М.П. Сая. Локальна комп'ютерна мережа на підприємстві, конфігурація персональних комп’ютерів. Аналіз апаратних засобів, системного програмного та документального забезпечення структурних підрозділів коледжу.

    отчет по практике [6,4 M], добавлен 27.05.2019

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

    дипломная работа [3,5 M], добавлен 26.04.2012

  • Аналіз сучасних методів та технологій проектування програмного забезпечення. Вибір цільової мобільної платформи. Розробка екранних форм, діаграми класів. Вимоги до програмного продукту. Аналіз небезпечних факторів у відділі роботи з фізичними особами.

    дипломная работа [508,1 K], добавлен 02.12.2015

  • Проблеми розробки компонентного програмного забезпечення автоматизованих систем управління. Сучасні компонентні технології обробки інформації. Аналіз вибраного середовища проектування програмного забезпечення: мова програмування PHP та Apache HTTP-сервер.

    дипломная работа [2,8 M], добавлен 11.05.2012

  • Причини незаконного використання програмного забезпечення. Дослідження збитку, нанесеного комп'ютерним піратством. Ризик роботи з нелегальним програмним забезпеченням і гідності ліцензійних програм. Види захисту прав виробників програмного забезпечення.

    реферат [60,8 K], добавлен 01.06.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.