Шифрування та дешифрування інформації

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2008
Тип роботи:
Звіт
Предмет:
Інші
Група:
КН-316

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” Звіт до лабораторної роботи №6 “ Шифрування та дешифрування інформації ” Львів – 2008 МЕТА РОБОТИ Мета роботи - вивчення простих методів шифрування та дешифрування інформації та їх особливостей. КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ 2. Шифрування підстановкою. 2.1.1. Прямі підстановки. У прямих підстановках кожний знак початкового тексту замінюється одним або декількома знаками. Одним з важливих підкласів прямих підстановок є моноалфавітні підстановки, в яких встановлюється взаємооднозначна відповідність між кожним знаком аі алфавіту повідомлень А і відповідним знаком hj зашифрованого тексту. Дуже простим прикладом перетворення секретної інформації є шифр Цезаря, який, за переказами, був використаний ще Юлієм Цезарем . Рядок знаків YGBPCGFBOQTGBUPQYBHQTBDCVVGTBUMKKPI є зашифрованою формою наступного повідомлення: WE NEED VORE SNOW FOR BETTER SKIING (Для кращого катання на лижах треба більше снігу). Шифр Цезаря фактично являє собою окремий випадок методу моноалфавітної підстановки букв одного алфавіту. Кожний знак Р з початкового алфавіту замінюється відповідним числом Р(Р), [р(А)=1, р(В)==2,. ... р(Z)=26, пропуск = 0]. Потім формується еквівалентне зашифроване число у з рівняння y(^)=p(Р) +2 (mod 27) (1) Таким чином, у(Т)=р(Т)+2=20+2=22, у(1)=р(1)+2=9+2=11 і т. д. Значення у потім заміняються відповідними їм буквами для отримання зашифрованого тексту. Проілюструємо шифрування методом підстановки шифром який не є шифром Цезаря. Початкове повідомлення: WE NEED MORE SNOW FOR BETTER SKIING. Ключ: вхід: bABCDEFGHIJKLMNOPQRSTUVWXYZ вихід: VZHLANQRCWDXFOUSPBTIELGMbKY Зашифрований текст: МNVUNNAVOSTNVIUSMVQSTVHNEENTVIXWWUR Зашифроване повідомлення отримано таким чином. Беремо знак з початкового повідомлення в рядку ВХІД ключа і замінюємо його відповідним знаком з рядка ВИХІД. Цей метод підстановки, хоч до деякої міри і є ефективним для заплутування при випадковому прочитанні, не зможе надовго зупинити досвідченого промислового шпигуна, оскільки він легко піддається здійснюваному за допомогою ЕОМ частотному аналізу зустрічності букв і пар букв. Всі методи моноалфавітної підстановки можна представити як числові перетворення букв початкового тексту, що розглядаються як числа. Кожна буква в тексті множиться на деяке число (назване десятковим коефіцієнтом) і додається до деякого іншого числа (коефіцієнту зсуву) с=(aP+s) mod K (2) де: а - десятковий коефіцієнт; s - коефіцієнт зсуву. Результуюче число зменшується за правилом віднімання модуля K, де K - розмір алфавіту, і зашифрований текст формується із відповідних йому алфавітних еквівалентів. Неважко пересвідчитися, що рівняння (1) для шифру Цезаря є фактично рівнянням (2) з а =1, s=2, і K=27. Існують машини, що мають команду ТРАНСЛЮВАТИ, яка забезпечує дуже легкі для використання шифри підстановки. Наприклад, на ІВМ 370 користувач встановлює таблицю з 256 байтів. Двійкове значення кожного байта, яке користувач хоче зашифрувати, використовується як індекс в таблиці для пошуку відповідного перетвореного байта. Це перетворення здійснюється за одну машинну команду. 2.1.2. Багатоалфавітні підстановки. Проста багатоалфавітна підстановка послідовно і циклічно міняє алфавіти, що використовуються. При u-алфавітній підстановці знак т1, з початкового повідомлення замінюється знаком з алфавіту В1, т2 відповідним з алфавіту В2. .., ті - знаком з алфавіту Ві, mі+1 знову з алфавіту В1 і т. д. ВХІДНИЙ ЗНАК: m1,m2,m3,m4,m5,m6,m7 АЛФАВІТ ПІДСТАНОВКИ: B1,B2,B3,B4,B5,B1,B2,. Ефект використання багатоалфавітної підстановки полягає в тому, що забезпечується маскування природної частотної статистики початкової мови L, оскільки конкретний знак з алфавіту А може бути перетворений в декілька різних знаків шифрувального алфавіту В. Рівень захисту, що забезпечується теоретично, пропорційний довжині періоду в послідовності алфавітів, що використовуються. Як приклад приведемо використання ключа восьмибуквенного слова SECURSTY, що повторюється для шифрування тексту. Запишемо під кожною початковою буквою відповідну букву ключа. Потім будемо розглядати алфавіт, як кільце, що складається з 27 символів. Привласнюючи відповідно значення 0-пропуск, 1-А, 2=В,...,26=Z, будемо мати восьмиалфавітиий шифр підстановки. Ми можемо розглядати перший алфавіт як такий що зсуває кожний знак, вміщений в кільце, на 19 (S), тобто W стає О, А стає Т, В стає U і т. д.; другий алфавіт, як зсуваючий кожний знак на 5 (Е), тобто Е стає J, А стає F, В стає G і т. д. Використовуючи додавання по модулю 27 отримаємо такий зашифрований текст: WE NEED MORE SNOW FOR BETTER SKIING SECURITYSECURITYSECURITYSECURITYSE OJCHWNXYETUZRAGMOEIVCLYHLRADGASJ Така проста багатоалфавітна підстановка (шифр Віжінера) з періодом и вимагає, щоб зловмисник мав в своєму розпорядженні принаймні 20и знаків, перехоплених в шифровці, до того як вона може бути розкрита. G-контурна багатоалфавітна підстановка являє собою метод шифрування, що використовує g наборів алфавітів, що застосовуються циклічно з періодами u1,u2,…ug. Цей шифр розкрити значно складніше, ніж просту багатоалфавітну підстановку. 2.1.3. Монофонічні шифри. Монофонічний шифр являє собою багатоалфавітний шифр підстановки, що зрівнює частоту появи зашифрованих знаків і таким чином захищає шифрований текст від розкриття за допомогою частотного аналізу. Для знаків, що зустрічаються часто, потрібна відносно велика кількість зашифрованих еквівалентів. У той же час для знаків, що використовуються нечасто, може виявитися достатнім один або два зашифрованих знаки. 2.2. Загальні принципи для методів перетворення підстановкою. Всі описані методи шифрування можна розглядати як задачі сучасної алгебри. Між К знаками алфавіту А і набором позитивних цілих чисел 0, 1,. ..,К-1 встановлюється довільна відповідність. При додаванні і відніманні по модулю К ці додатні цілі числа формують алгебраїчне кільце, що використовується для шифрування, а також однозначні зворотні перетворення. Тому якщо ми вибираємо ціле w в діапазоні від 0 до К-1, то цим самим автоматично проводимо вибір конкретного перетворення підстановкою ei=mi+w(mod k-1) і зворотнього перетворення mi=ei+(mod K-1). Якщо w фіксоване, то ми маємо одноалфавітну підстановку. Якщо w вибирається з послідовності w1,w2,…wn, то ми маємо багатоалфавітну підстановку з періодом n. Якщо в багатоалфавітній підстановці: а) число знаків в ключі перевищує загальне число початкових знаків, що шифруються; б) ключ використовується тільки один раз; в) початковий текст не може бути викрадений зловмисником, то зашифрований текст є теоретично таким, що нерозкривається і називається системою Вермена. Тому ми завжди прагнемо до довгих наборів знаків ключа. Як буде видно далі, ми можемо на практиці отримувати нескінченні ключові послідовності, які можуть бути використані в багатьох додатках. 2.3. Перестановки. Знаки початкового тексту можна переставляти відповідно до деякого правила. Наприклад, знаки тексту в явній формі WE/NEED/MORE/SNOW/FOR/BETTER/SKIING можуть бути переставлені відповідно до ключа: “переставити угрупування з чотирьох букв, що знаходяться в порядку 1 2 3 4 в порядок 3 1 4 2”. Первинний текст спочатку розбивається на групи WE/N_EED/_ MORE_ /SNO_W/FO_R/BE_TTER_/SKI_ING+, а потім перетворюється в зашифрований текст: /WNE_DE/E_RMEO_N/OS_FWO/_BRE/_ETRT_K/IS_GIXN. Коса межа відповідає пропуску, а + пустому знаку, що використовується для доповнення початкового тексту. Часто з кожним початковим алфавітом використовується декілька пустих знаків (нулів). Однак, якщо зловмисник відгадає довжину угрупування, то він легко може потім зробити різні можливі перестановки, особливо використовуючи ЕОМ. 2.4. Частотний аналіз. Більшість штучних мов (і всі природні мови) мають характерний частотний розподіл букв і інших знаків. Наприклад, буква Е найбільш часто зустрічається в англійській мові, а Z найбільш рідка. Однак це зовсім не говорить про те, що не будуть попадатися англійські (вихідні), повідомлення, в яких інша буква буде зустрічатися частіше, ніж Е, і рідше, ніж Z. Але для дуже великого числа англійських повідомлень можуть бути встановлені певні характерні частоти. Більшість повідомлень, зашифрованих методом перестановки або одноалфавітної підстановки, зберігають характерний частотний розподіл і, таким чином, дають крипто-аналітику шлях до розкриття шифру. Криптоаналітики часто використовують індекс відповідності (ІС) для визначення того, чи знаходяться вони на правильному шляху. По визначенню ІС являє собою оцінку суми квадратів імовірностей кожної букви. Це використовується особливо у тих випадках, коли об'єм зашифрованого тексту відносно великий. Шифровки, які дають значення ІС більші, ніж 0,066 (для англійської мови), самі повідомляють про те, що ймовірно використовувалася одноалфавітна підстановка, даючи, таким чином криптоаналітикам інструмент для того, щоб приступити до розгадки шифру. Якщо ІС знаходиться між 0,052 і 0,066, то, ймовірно, був використаний двохалфавітний шифр підстановки. Криптоаналітик просто бере символ, що найчастіше зустрічається, і передбачає, що це пропуск, потім бере наступний найбільш частий символ і передбачає, що це Е, і т.д., щоб прийти до можливого рішення. Цей процес можна автоматизувати застосувавши ЕОМ, однак аналіз можливих варіантів повідомлень повинна робити людина. Справа дуже ускладнюється, коли криптоаналітик стикається з рівномірним розподілом символів (IС=1/26=0,038 для англійської мови), який виходить при використанні багатоалфавітної підстановки. Хід роботи 1. Текст для шифрування: Функции f1,…, fk называются функциями обратной связи. Соответственно, в рассмат-риваемом в дипломной работе случае, функций обратной связи две . Любое преобразование, заданное системой n булевых функций от n переменных мож-но считать регистром сдвига с n обратными связями общего вида. Особый интерес на прак-тике представляют регистры сдвига с небольшим числом обратных связей. Существует большое количество литературы, посвященной изучению регистров сдвига с одной обратной связью и свойствам линейных систем. Однако, свойства регистров сдвига с двумя обратными связями общего вида (называемых в дальнейшем РС2) не нашли отклика в известной литера-туре. Вопрос изучения регистров сдвига в булевой параметризации является важным, в силу их активного использования в криптографии при шифровании данных и генерации последо-вательностей псевдослучайных чисел. Для того, чтобы преобразование можно было исполь-зовать в этих целях, оно должно обладать свойством регулярности, т.е. взаимной однозначно-сти. Регулярное преобразование из n булевых функций от n переменных можно рассматри-вать как перестановку на множестве двоичных наборов длины n, которая обладает опреде-ленной цикловой структурой. С криптографической точки зрения цикловая структура явля-ется важной характеристикой преобразования: более криптостойкими, как известно, являют-ся преобразования с наименьшим числом циклов, т.е. полноцикловые. В связи с этим, в дипломной работе были исследованы такие свойства РС2, как регу-лярность, обратимость, количественные оценки, цикловая структура и полноцикловость, и алгоритмы построения полноцикловых регистров сдвига. unit ABOUT; interface uses Windows, Classes, Graphics, Forms, Controls, StdCtrls, Buttons, ExtCtrls; type TAboutBox = class(TForm) Panel1: TPanel; OKButton: TButton; ProgramIcon: TImage; ProductName: TLabel; Version: TLabel; Copyright: TLabel; Comments: TLabel; Label1: TLabel; Label2: TLabel; private { Private declarations } public { Public declarations } end; var AboutBox: TAboutBox; implementation {$R *.dfm} end. З метою компактного представлення інформації в ПЕОМ для її збереження (архівації) чи передачі по каналу зв’язку широко використовується стиснення даних. Методи стиснення даних поділяються на дві групи: стиснення без втрат і стиснення з втратами. Крім того, методи групуються в залежності від характеру інформації, що стискається: стиснення символьної інформації (документів), стиснення нерухомих графічних зображень (JPEG) і стиснення рухомих графічних зображень (MPEG). Основним параметром, що характеризує рівень стиснення інформації є коефіцієнт стиснення, який визначається відношенням обсягу нестиснених даних до обсягу стиснених (наприклад 5:1). Зашифрований текст: зЫСПЭНН&l72▀2&lq&&СФМХФЬВ&ЗЫСПЭНРН&ТГЖФЬСТО&ВХМН4&&вТТЬХКЬВЬХКССТ2&Х&ЖФВВРФЬ3ЖНХФКРТР&Х&ЙНУЯТРСТО&ЖФГТЬК&ВЯЫЩФК2&ЗЫСПЭНО&ТГЖФЬСТО&ВХМН&ЙХК&4&&яГТК&УЖКТГЖФМТХФСНК2&МФЙФССТК&ВНВЬКРТО&t&ГЫЯКХШ&ЗЫСПЭНО&ТЬ&t&УКЖКРКССШ&РТЛ3СТ&ВЩНЬФЬ&&ЖКИНВЬЖТР&ВЙХНИФ&В&t&ТГЖФЬСРН&ВХМРН&ТГЪКИТ&ХНЙФ4&&тВТГО&НСЬКЖКВ&СФ&УЖФП3ЬНПК&УЖКЙВЬФХЯЬ&ЖКИНВЬЖ&ВЙХНИФ&В&СКГТЯЧНР&ЩНВЯТР&ТГЖФЬСШ&ВХМКО4&&вЫЪКВЬХЫКЬ&ГТЯЧТК&ПТЯНЩКВЬХТ&ЯНЬКЖФЬЫЖ2&УТВХЪКССТО&НМЫЩКСН&ЖКИНВЬЖТХ&ВЙХНИФ&В&ТЙСТО&ТГЖФЬСТО&ВХМ&Н&ВХТОВЬХФР&ЯНСКОСШ&ВНВЬКР4&&тЙСФПТ2&ВХТОВЬХФ&ЖКИНВЬЖТХ&ВЙХНИФ&В&ЙХЫР&ТГЖФЬСРН&ВХМРН&ТГЪКИТ&ХНЙФ&.СФМХФКРШ&Х&ЙФЯСКОЧКР&жв8/&СК&СФЧЯН&ТЬПЯНПФ&Х&НМХКВЬСТО&ЯНЬКЖФ3ЬЫЖК4хТУЖТВ&НМЫЩКСН&ЖКИНВЬЖТХ&ВЙХНИФ&Х&ГЫЯКХТО&УФЖФРКЬЖНМФЭНН&ХЯКЬВ&ХФЛСР2&Х&ВНЯЫ&НШ&ФПЬНХСТИТ&НВУТЯМТХФСН&&Х&ПЖНУЬТИЖФЗНН&УЖН&ЧНЗЖТХФСНН&ЙФССШ&Н&ИКСКЖФЭНН&УТВЯКЙТ3ХФЬКЯСТВЬКО&УВКХЙТВЯЫЩФОСШ&ЩНВКЯ4&&йЯ&ЬТИТ2&ЩЬТГ&УЖКТГЖФМТХФСНК&РТЛСТ&ГЯТ&НВУТЯ3МТХФЬ&Х&ЬНШ&ЭКЯШ2&ТСТ&ЙТЯЛСТ&ТГЯФЙФЬ&ВХТОВЬХТР&ЖКИЫЯЖСТВЬН2&Ь4К4&ХМФНРСТО&ТЙСТМСФЩСТ3ВЬН4&&жКИЫЯЖСТК&УЖКТГЖФМТХФСНК&НМ&t&ГЫЯКХШ&ЗЫСПЭНО&ТЬ&t&УКЖКРКССШ&РТЛСТ&ЖФВВРФЬЖН3ХФЬ&ПФП&УКЖКВЬФСТХПЫ&СФ&РСТЛКВЬХК&ЙХТНЩСШ&СФГТЖТХ&ЙЯНС&t2&ПТЬТЖФ&ТГЯФЙФКЬ&ТУЖКЙК3ЯКССТО&ЭНПЯТХТО&ВЬЖЫПЬЫЖТО4&&&в&ПЖНУЬТИЖФЗНЩКВПТО&ЬТЩПН&МЖКСН&ЭНПЯТХФ&ВЬЖЫПЬЫЖФ&ХЯ3КЬВ&ХФЛСТО&ШФЖФПЬКЖНВЬНПТО&УЖКТГЖФМТХФСН@&&ГТЯКК&ПЖНУЬТВЬТОПНРН2&ПФП&НМХКВЬСТ2&ХЯЬ3В&УЖКТГЖФМТХФСН&В&СФНРКСЧНР&ЩНВЯТР&ЭНПЯТХ2&Ь4К4&УТЯСТЭНПЯТХК4х&ВХМН&В&ЬНР2&Х&ЙНУЯТРСТО&ЖФГТЬК&ГЯН&НВВЯКЙТХФС&ЬФПНК&ВХТОВЬХФ&жв82&ПФП&ЖКИЫ3ЯЖСТВЬ2&ТГЖФЬНРТВЬ2&ПТЯНЩКВЬХКССК&ТЭКСПН2&ЭНПЯТХФ&ВЬЖЫПЬЫЖФ&Н&УТЯСТЭНПЯТХТВЬ2&Н&ФЯИТЖНЬР&УТВЬЖТКСН&УТЯСТЭНПЯТХШ&ЖКИНВЬЖТХ&ВЙХНИФ4{toz&GHU[ZAotzkxlgik{yky&]otju}y2&Irgyyky2&Mxgvnoiy2&Luxsy2&Iutzxury2&YzjIzxry2&&H{zzuty2&K~zIzxryAzvk&&ZGhu{zHu~&C&irgyy.ZLuxs/&&&&Vgtkr7@&ZVgtkrA&&&&UQH{zzut@&ZH{zzutA&&&&VxumxgsOiut@&ZOsgmkA&&&&Vxuj{izTgsk@&ZRghkrA&&&&\kxyout@&ZRghkrA&&&&Iuvxomnz@&ZRghkrA&&&&Iussktzy@&ZRghkrA&&&&Rghkr7@&ZRghkrA&&&&Rghkr8@&ZRghkrA&&vxo|gzk&&&&│&Vxo|gzk&jkirgxgzouty&┐&&v{hroi&&&&│&V{hroi&jkirgxgzouty&┐&&ktjA|gx&&Ghu{zHu~@&ZGhu{zHu~Aosvrksktzgzout│*X&04jls┐ktj4&м&РКЬТ&ПТРУФПЬСТИТ&УЖКЙВЬФХЯКСС&╧СЗТЖРФЭ╧е&Х&уктр&ЙЯ&ее&МГКЖКЛКСС&.ФЖШ╧ХФЭ╧е/&ЩН&УКЖКЙФЩ╧&УТ&ПФСФЯЫ&МХ≤МПЫ&ЧНЖТПТ&ХНПТЖНВЬТХЫюЬВ&ВЬНВСКСС&ЙФСНШ4&рКЬТЙН&ВЬНВСКСС&ЙФСНШ&УТЙ╧ЯЬВ&СФ&ЙХ╧&ИЖЫУН@&ВЬНВСКСС&ГКМ&ХЬЖФЬ&╧&ВЬНВСКСС&М&ХЬЖФЬФРН4&пЖ╧Р&ЬТИТ2&РКЬТЙН&ИЖЫУЫЬВ&Х&МФЯКЛСТВЬ╧&Х╧Й&ШФЖФПЬКЖЫ&╧СЗТЖРФЭ╧е2&ЪТ&ВЬНВПФюЬВ@&ВЬНВСКСС&ВНРХТЯСТе&╧СЗТЖРФЭ╧е&.ЙТПЫРКСЬ╧Х/2&ВЬНВСКСС&СКЖЫШТРНШ&ИЖФЗ╧ЩСНШ&МТГЖФЛКС&.PVKM/&╧&ВЬНВСКСС&ЖЫШТРНШ&ИЖФЗ╧ЩСНШ&МТГЖФЛКС&.SVKM/4&тВСТХСНР&УФЖФРКЬЖТР2&ЪТ&ШФЖФПЬКЖНМЫю&Ж╧ХКС&ВЬНВСКСС&╧СЗТЖРФЭ╧е&ю&ПТКЗ╧Э╧юСЬ&ВЬНВСКСС2&ПНО&ХНМСФЩФюЬВ&Х╧ЙСТЧКССР&ТГВИЫ&СКВЬНВСКСНШ&ЙФСНШ&ЙТ&ТГВИЫ&ВЬНВСКСНШ&.СФУЖНПЯФЙ&;@7/4 Таблиця зустрічання символів в тексті:  Таблиця зустрічання символів в зашифрованому тексті:  Дешифрований текст: Функции f1,…, fk называются функциями обратной связи. Соответственно, в рассмат-риваемом в дипломной работе случае, функций обратной связи две . Любое преобразование, заданное системой n булевых функций от n переменных мож-но считать регистром сдвига с n обратными связями общего вида. Особый интерес на прак-тике представляют регистры сдвига с небольшим числом обратных связей. Существует большое количество литературы, посвященной изучению регистров сдвига с одной обратной связью и свойствам линейных систем. Однако, свойства регистров сдвига с двумя обратными связями общего вида (называемых в дальнейшем РС2) не нашли отклика в известной литера-туре. Вопрос изучения регистров сдвига в булевой параметризации является важным, в силу их активного использования в криптографии при шифровании данных и генерации последо-вательностей псевдослучайных чисел. Для того, чтобы преобразование можно было исполь-зовать в этих целях, оно должно обладать свойством регулярности, т.е. взаимной однозначно-сти. Регулярное преобразование из n булевых функций от n переменных можно рассматри-вать как перестановку на множестве двоичных наборов длины n, которая обладает опреде-ленной цикловой структурой. С криптографической точки зрения цикловая структура явля-ется важной характеристикой преобразования: более криптостойкими, как известно, являют-ся преобразования с наименьшим числом циклов, т.е. полноцикловые. В связи с этим, в дипломной работе были исследованы такие свойства РС2, как регу-лярность, обратимость, количественные оценки, цикловая структура и полноцикловость, и алгоритмы построения полноцикловых регистров сдвига. unit ABOUT; interface uses Windows, Classes, Graphics, Forms, Controls, StdCtrls, Buttons, ExtCtrls; type TAboutBox = class(TForm) Panel1: TPanel; OKButton: TButton; ProgramIcon: TImage; ProductName: TLabel; Version: TLabel; Copyright: TLabel; Comments: TLabel; Label1: TLabel; Label2: TLabel; private { Private declarations } public { Public declarations } end; var AboutBox: TAboutBox; implementation {$R *.dfm} end. З метою компактного представлення інформації в ПЕОМ для її збереження (архівації) чи передачі по каналу зв’язку широко використовується стиснення даних. Методи стиснення даних поділяються на дві групи: стиснення без втрат і стиснення з втратами. Крім того, методи групуються в залежності від характеру інформації, що стискається: стиснення символьної інформації (документів), стиснення нерухомих графічних зображень (JPEG) і стиснення рухомих графічних зображень (MPEG). Основним параметром, що характеризує рівень стиснення інформації є коефіцієнт стиснення, який визначається відношенням обсягу нестиснених даних до обсягу стиснених (наприклад 5:1). Програма #include<stdio.h> #include<conio.h> #include<iostream.h> #include<math.h> void porivn() { FILE *fp; char buf[15000],cumvol[255],c,vel_f[20],Vx_f[20],Vux_f[20]; int cum_kil[255],kil_c,i=0,j,e,por=1,r; an: printf("\nFail dlia analizy: "); gets(vel_f); vx1: printf("\nVxidnui fail: "); gets(Vx_f); if ((fp=fopen(vel_f,"r"))==NULL) {perror(vel_f); goto an; } while ((c=getc(fp))!=EOF) {i++; buf[i]=c; kil_c=i; } fclose(fp); cout << kil_c; for (i=1;i<=255;) {cumvol[i]=0; cum_kil[i]=0; i++; } i=1; while (i<=kil_c) {e=0; for (j=1;j<=255||e>1;) { if (buf[i]==cumvol[j]) {e=1; r=j; } j++; } if (e==0) {cumvol[por]=buf[i]; cum_kil[por]=cum_kil[por]+1; por++; } else {cum_kil[r]=cum_kil[r]+1; } i++; } int b,d; for (i=1;i<por-1;i++) for (j=i+1;j<por;j++) if (cum_kil[i]<cum_kil[j]) {b=cum_kil[i]; d=cumvol[i]; cum_kil[i]=cum_kil[j]; cumvol[i]=cumvol[j]; cum_kil[j]=b; cumvol[j]=d; } char buf1[2500],cumvol1[255],c1; int cum_kil1[255],kil_c1,i1=0,j1,e1,por1=1,r1; if ((fp=fopen(Vx_f,"r"))==NULL) {perror(Vx_f); goto vx1; } //printf("\n"); while ((c1=getc(fp))!=EOF) {i1++; buf1[i1]=c1; // cout <<buf1[i1]; kil_c1=i1; } fclose(fp); for (i1=1;i1<=255;) {cumvol1[i1]=0; cum_kil1[i1]=0; i1++; } i1=1; while (i1<=kil_c1) {e1=0; for (j1=1;j1<=255||e1>1;) {if (buf1[i1]==cumvol1[j1]) {e1=1; r1=j1; } j1++; } if (e1==0) {cumvol1[por1]=buf1[i1]; cum_kil1[por1]=cum_kil1[por1]+1; por1++; } else {cum_kil1[r1]=cum_kil1[r1]+1; } i1++; } int b1,d1; for (i1=1;i1<por1-1;i1++) for (j1=i1+1;j1<por1;j1++) if (cum_kil1[i1]<cum_kil1[j1]) {b1=cum_kil1[i1]; d1=cumvol1[i1]; cum_kil1[i1]=cum_kil1[j1]; cumvol1[i1]=cumvol1[j1]; cum_kil1[j1]=b1; cumvol1[j1]=d1; } printf("\nVuxidnui fail: "); gets(Vux_f); if ((fp=fopen(Vux_f,"w"))==NULL) perror(Vux_f); for (i=1;i<kil_c1;i++) for (j=1;j<=255;j++) if (buf1[i]==cumvol1[j]) fprintf(fp,"%c",cumvol[j]); fclose(fp); return; }; main() {begin: clrscr(); FILE *fp; char Vx_f[20],Vux_f[20]; int i=0,kil_c,c,buf[10000],shufr[10000],vubir; printf("Shufryvannia - 1"); printf("\nRozshufryvannia - 2"); printf("\nDekodyvannia - 3"); printf("\nVuxid - 4\n"); vubir=getche(); if(vubir == '4') goto end; if(vubir == '3') {porivn(); goto begin; } vx: printf("\nVxidnui fail: "); gets(Vx_f); printf("\nVuxidnui fail: "); gets(Vux_f); if ((fp=fopen(Vx_f,"r"))==NULL) {perror(Vx_f); goto vx; } while ((c=getc(fp))!=EOF) {i++; buf[i]=c; kil_c=i; } fclose(fp); if ((fp=fopen(Vux_f,"w"))==NULL) {perror(Vux_f); return 1; } if(vubir == '1') for (i=1;i<=kil_c;i++) {shufr[i]=fmod(buf[i]+6,256); fprintf(fp,"%c",shufr[i]); } if(vubir == '2') for (i=1;i<=kil_c;i++) {shufr[i]=buf[i]-6; if (shufr[i]<=0) shufr[i]=256+shufr[i]; fprintf(fp,"%c",shufr[i]); } fclose(fp); goto begin; end: getch(); } Висновок: У даній лабороторнійй роботі ми ознайомились з простими методами шифрування та дешифрування інформації та їхніми особливостями.
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

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

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!