МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
Кафедра САПР
ЗВІТ
до лабораторної роботи №6
“МЕТОДИ ШИФРУВАННЯ ТА ДЕШИФРУВАННЯ”
з курсу:
“Методи та засоби комп’ютерних
інформаційних технологій”
МЕТА РОБОТИ
Мета роботи - вивчення простих методів шифрування та дешифрування інформації та їх особливостей.
КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ
2.1. Криптографічні системи.
Перетворення секретної інформації – це кодування даних, яке використовується для маскування інформації. Ці перетворення змінюють дані, представлені в явній формі, так, що вони стають нерозпізнаваними (з певною мірою надійності) неавторизованими людьми. Шифрування, тобто перетворення секретної інформації, є особливо ефективним засобом проти несанкціонованого доступу до повідомлень, які передаються по лініях зв'язку і неавторизованих доступів до даних, що зберігаються у віддалених файлах. Навіть просте перетворення секретної інформації є ефективним засобом, що дає можливість приховати її значення від більшості користувачів.
Коди і шифри використовувалися протягом багатьох віків. Спартанці в V ст. до н. е. і правляча верхівка в Венеції (Рада десяти) в XVI в, користувалися методами шифрування задовго до епохи ЕОМ.
Якщо інші методи управління доступом не зможуть запобігти попаданню даних в руки неавторизованих людей, то ці дані все одно будуть для них незрозумілі, якщо вони були зашифровані. Крім того, вартість простих, але досить ефективних перетворень секретної інформації, может бути дуже невеликою.
У загальній формі в криптографічній системі початкове повідомлення М і ключ К є входами в деякий перетворюючий пристрій (який може бути реалізоване або апаратно, або програмно). Якщо до лінії зв'язку підключиться зловмисник, він зможе викрасти зашифроване повідомлення (або шифровку) Е. Процес відновлення повідомлення при невідомому ключі називаеться дещифруваненям.
Початкове повідомлення може бути замасковане за рахунок процедури перетворення. На іншому кінці незахищеної (по допущенню) лінії зв'язку знаходиться апаратний або програмний засіб, який розшифровує повідомлення для отримання початкового тексту.
Шифрувальні пристрої можуть встановлюватися між кінцевими пристроями і лінією зв'язку або можуть бути вбудовані виробниками в периферійні пристрої різними способами. Поступаючі сигнали управління зовнішніми пристроями, стани і ідентифікаційна інформація між компонентами можуть передаватися в незашифрованому вигляді, при цьому ефективність захисту не зменшиться.
Останнім часом широко використовується принцип несекретності проектування, коли всі сторони проектування методу шифрування можуть бути загальнодоступними, за винятком ключів. На практиці доцільно застосовувати шифр, суворо відповідний необхідним цілям. Якщо простий дешевий шифр буде в достатній мірі збільшувати “трудомісткість”, розкриття зашифрованого повідомлення, то цього достатньо. У більшості випадків актуальність зашифрованого повідомлення з часом падає, особливо у військовій сфері. Тому часто достатньо щоб повідомлення не було дешифроване лише протягом певного часу. Але потрібно мати на увазі, що деякі схеми шифрування, які на перший погляд здаються стійкими, насправді легко розкриваються, особливо при використанні ЕОМ. На практиці завжди потрібно прагнути до досягнення компромісу між вартістю шифрування і необхідним рівнем безпеки.
Щоб зрозуміти зміст зашифрованого повідомлення, неавторизовані особи повинні знати алгоритм шифрування (який їм іноді вдається дізнатися) і ключ (який не повинен бути їм доступний). Ключі не повинні зберігатися в системі довше, ніж це необхідно. У ідеальному випадку їм потрібно знаходитися там тільки на час дійсного використання.
2.2. Шифрування підстановкою.
2.2.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.
Ключ:
вхід: bABCDEFGHIJKLMNOPQRTUVWXYZ
вихід: VZHLANQRCWDXFOUSPBTIELGMbKY
Зашифрований текст:
МNVUNNAVOSTNVIUSMVQSTVHNEENTVIXWWUR
Зашифроване повідомлення отримано таким чином. Беремо знак з початкового повідомлення в рядку ВХІД ключа і замінюємо його відповідним знаком з рядка ВИХІД.
Цей метод підстановки, хоч до деякої міри і є ефективним для заплутування при випадковому прочитанні, не зможе надовго зупинити досвідченого промислового шпигуна, оскільки він легко піддається здійснюваному за допомогою ЕОМ частотному аналізу зустрічності букв і пар букв.
Всі методи моноалфавітної підстановки можна представити як числові перетворення букв початкового тексту, що розглядаються як числа. Кожна буква в тексті множиться на деяке число (назване десятковим коефіцієнтом) і додається до деякого іншого числа (коефіцієнту зсуву)
с=(aP+s) mod K (2)
де: а - десятковий коефіцієнт; s - коефіцієнт зсуву. Результуюче число зменшується за правилом віднімання модуля K, де K - розмір алфавіту, і зашифрований текст формується із відповідних йому алфавітних еквівалентів. Неважко пересвідчитися, що рівняння (1) для шифру Цезаря є фактично рівнянням (2) з а =1, s=2, і K=27.
Існують машини, що мають команду ТРАНСЛЮВАТИ, яка забезпечує дуже легкі для використання шифри підстановки. Наприклад, на ІВМ 370 користувач встановлює таблицю з 256 байтів. Двійкове значення кожного байта, яке користувач хоче зашифрувати, використовується як індекс в таблиці для пошуку відповідного перетвореного байта. Це перетворення здійснюється за одну машинну команду.
2.2.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.2.3. Монофонічні шифри
Монофонічний шифр являє собою багатоалфавітний шифр підстановки, що зрівнює частоту появи зашифрованих знаків і таким чином захищає шифрований текст від розкриття за допомогою частотного аналізу. Для знаків, що зустрічаються часто, потрібна відносно велика кількість зашифрованих еквівалентів. У той же час для знаків, що використовуються нечасто, може виявитися достатнім один або два зашифрованих знаки.
2.3. Загальні принципи для методів перетворення підстановкою.
Всі описані методи шифрування можна розглядати як задачі сучасної алгебри. Між К знаками алфавіту А і набором позитивних цілих чисел 0, 1,. ..,К-1 встановлюється довільна відповідність. При додаванні і відніманні по модулю К ці додатні цілі числа формують алгебраїчне кільце, що використовується для шифрування, а також однозначні зворотні перетворення. Тому якщо ми вибираємо ціле w в діапазоні від 0 до К-1, то цим самим автоматично проводимо вибір конкретного перетворення підстановкою ei=mi+w(mod k-1) і зворотнього перетворення mi=ei+(mod K-1).
Якщо w фіксоване, то ми маємо одноалфавітну підстановку. Якщо w вибирається з послідовності w1,w2,…wn, то ми маємо багатоалфавітну підстановку з періодом n.
Якщо в багатоалфавітній підстановці:
а) число знаків в ключі перевищує загальне число початкових знаків, що шифруються;
б) ключ використовується тільки один раз;
в) початковий текст не може бути викрадений зловмисником,
то зашифрований текст є теоретично таким, що нерозкривається і називається системою Вермена. Тому ми завжди прагнемо до довгих наборів знаків ключа. Як буде видно далі, ми можемо на практиці отримувати нескінченні ключові послідовності, які можуть бути використані в багатьох додатках.
2.4. Перестановки.
Знаки початкового тексту можна переставляти відповідно до деякого правила. Наприклад, знаки тексту в явній формі 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.5. Частотний аналіз.
Більшість штучних мов (і всі природні мови) мають характерний частотний розподіл букв і інших знаків. Наприклад, буква Е найбільш часто зустрічається в англійській мові, а Z найбільш рідка. Однак це зовсім не говорить про те, що не будуть попадатися англійські (вихідні), повідомлення, в яких інша буква буде зустрічатися частіше, ніж Е, і рідше, ніж Z. Але для дуже великого числа англійських повідомлень можуть бути встановлені певні характерні частоти.
Більшість повідомлень, зашифрованих методом перестановки або одноалфавітної підстановки, зберігають характерний частотний розподіл і, таким чином, дають крипто-аналітику шлях до розкриття шифру. Криптоаналітики часто використовують індекс відповідності (ІС) для визначення того, чи знаходяться вони на правильному шляху.
По визначенню ІС являє собою оцінку суми квадратів імовірностей кожної букви. Це використовується особливо у тих випадках, коли об'єм зашифрованого тексту відносно великий. Шифровки, які дають значення ІС більші, ніж 0,066 (для англійської мови), самі повідомляють про те, що ймовірно використовувалася одноалфавітна підстановка, даючи, таким чином криптоаналітикам інструмент для того, щоб приступити до розгадки шифру. Якщо ІС знаходиться між 0,052 і 0,066, то, ймовірно, був використаний двохалфавітний шифр підстановки. Криптоаналітик просто бере символ, що найчастіше зустрічається, і передбачає, що це пропуск, потім бере наступний найбільш частий символ і передбачає, що це Е, і т.д., щоб прийти до можливого рішення. Цей процес можна автоматизувати застосувавши ЕОМ, однак аналіз можливих варіантів повідомлень повинна робити людина.
Справа дуже ускладнюється, коли криптоаналітик стикається з рівномірним розподілом символів (IС=1/26=0,038 для англійської мови), який виходить при використанні багатоалфавітної підстановки.
Текст для шифрування
(License.txt)
License agreement
This License Agreement ("Agreement") accompanies the OllyDbg version 1.10,
OllyDbg Plugin Development Kit version 1.10 and related files ("Software").
By using the Software, you agree to be bound by all of the terms and
conditions of the Agreement.
The Software is distributed "as is", without warranty of any kind, expressed
or implied, including, but not limited to warranty of fitness for any
particular purpose. In no event will the Author be liable to you for any
special, incidental, indirect, consequential or any other damages caused by
the use, misuse, or the inability to use of the Software, including any lost
profits or lost savings, even if Author has been advised of the possibility
of such damages.
The Software is owned by Oleh Yuschuk ("Author") and is Copyright (c) 2000-
2004 Oleh Yuschuk. To use this Software on a permanent basis or for commercial
purposes, you must register it by filling the supplied registration form and
sending it to the Author. You don't need to register Software if you use it
exclusively with Randall Hyde's High Level Assembly. If you are already a
registered OllyDbg user, you don't need to re-register the Software again.
If the Software is registered to a company or organization, any person within
the company or organization has the right to use it at work. You may install
the registered Software on any number of storage devices, like hard disks,
floppy disks etc. and are allowed to make any number of backup copies of this
Software.
You are not allowed to modify, decompile, disassemble or reverse engineer
the Software except and only to the extent that such activity is expressly
permitted by applicable law. You are not allowed to distribute or use any
parts of the Software separately. You may make and distribute copies of this
Software provided that a) the copy contains all files from the original
distribution and these files remain unchanged; b) if you distribute any
other files (for example, plugins) together with the Software, they must be
clearly marked as such and the conditions of their use cannot be more
restrictive than conditions of this Agreement; and c) you collect no fee
(except for transport media, like CD or diskette), even if your distribution
contains additional files.
You are allowed to develop and distribute your own plugins -- Dynamic Link
Libraries that connect to the Software and make use of the functions
implemented in the Software -- free of charge provided that a) your plugins
contain no features that persuade or force user to register them, or limit
functionality of unregistered plugins; b) you allow free distribution of your
plugins on the conditions similar to that of the Software; and c) you collect
no fee (except for transport media, like CD or diskette). If you want to
develop commercial plugin, please contact Author for a special Agreement.
The distribution includes files PSAPI.DLL and DBGHELP.DLL that are the
Microsoft(R) Redistributable files. These files should be installed only in
the directory where the Software resides. You should use supplied PSAPI.DLL
only on Windows NT(R) 4.0. You are not allowed to distribute PSAPI.DLL or
DBGHELP.DLL separately from the Software.
This Agreement covers only the actual version 1.10 of the OllyDbg and
version 1.10 of the OllyDbg Plugin Development Kit. All other versions are
covered by separate License Agreements.
Ключ для шифрування
! #"%$'&)(+*-,/.1032547698;:=<?>A@CBEDGFIHKJMLONQPSRUTWVYX[Z]\_^a`cbedgfihkjmlonqpsrutwvyx{z}|~ЃЂѓ‚…„‡†‰€‹ЉЌЊЏЋ‘ђ“’•”—–™›љќњџћЎ ЈўҐ¤§¦©Ё«Є¬Ї®±°іІµґ·¶№ё»єЅјїѕБАГВЕДЗЖЙИЛКНМПОСРУТХФЧЦЩШЫЪЭЬЯЮбагведзжйилкнмпосрутхфчцщшыъэьяю
Текст програми для шифрування і розшифрування
#include<iostream.h>
#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<fstream.h>
#include<io.h>
void main(void)
{
char array_alfavit_n[257],filename[64],array_alfavit_o[257],ch,symbol;
unsigned int i,j;
FILE *fill,*fill_1;
clrscr();
cout<<"Enter file name:> ";
cin>>filename;
for(i=0;i<=256;i++) //Obnylutu masuvu
array_alfavit_n[i]=0;
for(i=0;i<256;i++) //Stvoryjemo alfavit
array_alfavit_n[i]=i;
//Stvoryjemo kljych
for(i=0;i<255;i++)
{
symbol=array_alfavit_n[i];
array_alfavit_o[i+1]=symbol;
symbol=array_alfavit_n[i+1];
array_alfavit_o[i]=symbol;
i++;
}
fill_1=fopen("key.txt","w");
for(i=0;i<256;i++)
fprintf(fill_1,"%c",array_alfavit_o[i]);
fill_1=fopen(filename,"r");
fill=fopen("shufr.bin","w");
while(!feof(fill_1)) //Shufryvannja
{
symbol=fgetc(fill_1);
if(symbol!=-1)
fputc(array_alfavit_o[symbol],fill);
}
fclose(fill);
fclose(fill_1);
//22222222222222
fill_1=fopen("shufr.bin","r");
fill=fopen("deshufr.txt","w");
cout<<"Rozshufryvatu?(y/n) ";
cin>>symbol;
if(symbol=='y')
{
while(!feof(fill_1)) //Deshufryvannja
{
symbol=fgetc(fill_1);
if(symbol!=-1)
fputc(array_alfavit_o[symbol],fill);
}
}
fclose(fill);
fclose(fill_1);
}
Текст зашифрованого файлу
Mhbdord!`fsddldouUihr!Mhbdord!@fsddldou!)#@fsddldou#(!`bbnlq`ohdr!uid!NmmxEcf!wdsrhno!0/01-NmmxEcf!Qmtfho!Edwdmnqldou!Jhu!wdsrhno!0/01!`oe!sdm`ude!ghmdr!)#Rnguv`sd#(/Cx!trhof!uid!Rnguv`sd-!xnt!`fsdd!un!cd!cntoe!cx!`mm!ng!uid!udslr!`oebnoehuhnor!ng!uid!@fsddldou/!Uid!Rnguv`sd!hr!ehrushctude!#`r!hr#-!vhuintu!v`ss`oux!ng!`ox!jhoe-!dyqsdrrdens!hlqmhde-!hobmtehof-!ctu!onu!mhlhude!un!v`ss`oux!ng!ghuodrr!gns!`oxq`suhbtm`s!qtsqnrd/!Ho!on!dwdou!vhmm!uid!@tuins!cd!mh`cmd!un!xnt!gns!`oxrqdbh`m-!hobhedou`m-!hoehsdbu-!bnordptdouh`m!ns!`ox!nuids!e`l`fdr!b`trde!cxuid!trd-!lhrtrd-!ns!uid!ho`chmhux!un!trd!ng!uid!Rnguv`sd-!hobmtehof!`ox!mnruqsnghur!ns!mnru!r`whofr-!dwdo!hg!@tuins!i`r!cddo!`ewhrde!ng!uid!qnrrhchmhuxng!rtbi!e`l`fdr/Uid!Rnguv`sd!hr!nvode!cx!Nmdi!Xtrbitj!)#@tuins#(!`oe!hr!Bnqxshfiu!)b(!3111,3115!Nmdi!Xtrbitj/!Un!trd!uihr!Rnguv`sd!no!`!qdsl`odou!c`rhr!ns!gns!bnlldsbh`mqtsqnrdr-!xnt!ltru!sdfhruds!hu!cx!ghmmhof!uid!rtqqmhde!sdfhrus`uhno!gnsl!`oerdoehof!hu!un!uid!@tuins/!Xnt!eno&u!odde!un!sdfhruds!Rnguv`sd!hg!xnt!trd!hudybmtrhwdmx!vhui!S`oe`mm!Ixed&r!Ihfi!Mdwdm!@rrdlcmx/!Hg!xnt!`sd!`msd`ex!`sdfhrudsde!NmmxEcf!trds-!xnt!eno&u!odde!un!sd,sdfhruds!uid!Rnguv`sd!`f`ho/Hg!uid!Rnguv`sd!hr!sdfhrudsde!un!`!bnlq`ox!ns!nsf`oh{`uhno-!`ox!qdsrno!vhuihouid!bnlq`ox!ns!nsf`oh{`uhno!i`r!uid!shfiu!un!trd!hu!`u!vnsj/!Xnt!l`x!horu`mmuid!sdfhrudsde!Rnguv`sd!no!`ox!otlcds!ng!runs`fd!edwhbdr-!mhjd!i`se!ehrjr-gmnqqx!ehrjr!dub/!`oe!`sd!`mmnvde!un!l`jd!`ox!otlcds!ng!c`bjtq!bnqhdr!ng!uihrRnguv`sd/Xnt!`sd!onu!`mmnvde!un!lnehgx-!edbnlqhmd-!ehr`rrdlcmd!ns!sdwdsrd!dofhoddsuid!Rnguv`sd!dybdqu!`oe!nomx!un!uid!dyudou!ui`u!rtbi!`buhwhux!hr!dyqsdrrmxqdslhuude!cx!`qqmhb`cmd!m`v/!Xnt!`sd!onu!`mmnvde!un!ehrushctud!ns!trd!`oxq`sur!ng!uid!Rnguv`sd!rdq`s`udmx/!Xnt!l`x!l`jd!`oe!ehrushctud!bnqhdr!ng!uihrRnguv`sd!qsnwhede!ui`u!`(!uid!bnqx!bnou`hor!`mm!ghmdr!gsnl!uid!nshfho`mehrushctuhno!`oe!uidrd!ghmdr!sdl`ho!tobi`ofde:!c(!hg!xnt!ehrushctud!`oxnuids!ghmdr!)gns!dy`lqmd-!qmtfhor(!unfduids!vhui!uid!Rnguv`sd-!uidx!ltru!cdbmd`smx!l`sjde!`r!rtbi!`oe!uid!bnoehuhnor!ng!uidhs!trd!b`oonu!cd!lnsdsdrushbuhwd!ui`o!bnoehuhnor!ng!uihr!@fsddldou:!`oe!b(!xnt!bnmmdbu!on!gdd)dybdqu!gns!us`orqnsu!ldeh`-!mhjd!BE!ns!ehrjduud(-!dwdo!hg!xnts!ehrushctuhnobnou`hor!`eehuhno`m!ghmdr/Xnt!`sd!`mmnvde!un!edwdmnq!`oe!ehrushctud!xnts!nvo!qmtfhor!,,!Exo`lhb!MhojMhcs`shdr!ui`u!bnoodbu!un!uid!Rnguv`sd!`oe!l`jd!trd!ng!uid!gtobuhnorhlqmdldoude!ho!uid!Rnguv`sd!,,!gsdd!ng!bi`sfd!qsnwhede!ui`u!`(!xnts!qmtfhorbnou`ho!on!gd`utsdr!ui`u!qdsrt`ed!ns!gnsbd!trds!un!sdfhruds!uidl-!ns!mhlhugtobuhno`mhux!ng!tosdfhrudsde!qmtfhor:!c(!xnt!`mmnv!gsdd!ehrushctuhno!ng!xntsqmtfhor!no!uid!bnoehuhnor!rhlhm`s!un!ui`u!ng!uid!Rnguv`sd:!`oe!b(!xnt!bnmmdbuon!gdd!)dybdqu!gns!us`orqnsu!ldeh`-!mhjd!BE!ns!ehrjduud(/!Hg!xnt!v`ou!unedwdmnq!bnlldsbh`m!qmtfho-!qmd`rd!bnou`bu!@tuins!gns!`!rqdbh`m!@fsddldou/Uid!ehrushctuhno!hobmtedr!ghmdr!QR@QH/EMM!`oe!ECFIDMQ/EMM!ui`u!`sd!uidLhbsnrngu)S(!Sdehrushctu`cmd!ghmdr/!Uidrd!ghmdr!rintme!cd!horu`mmde!nomx!houid!ehsdbunsx!vidsd!uid!Rnguv`sd!sdrhedr/!Xnt!rintme!trd!rtqqmhde!QR@QH/EMMnomx!no!Vhoenvr!OU)S(!5/1/!Xnt!`sd!onu!`mmnvde!un!ehrushctud!QR@QH/EMM!nsECFIDMQ/EMM!rdq`s`udmx!gsnl!uid!Rnguv`sd/Uihr!@fsddldou!bnwdsr!nomx!uid!`but`m!wdsrhno!0/01!ng!uid!NmmxEcf!`oewdsrhno!0/01!ng!uid!NmmxEcf!Qmtfho!Edwdmnqldou!Jhu/!@mm!nuids!wdsrhnor!`sdbnwdsde!cx!rdq`s`ud!Mhbdord!@fsddldour/
Текст програми для дешифрації методом частотного аналізу
#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<iostream.h>
#include<fstream.h>
class sym
{
public:
char ch;
float chastota;
};
void main(void)
{
sym alfavit[257],key[257];
char symbol,filename[64];
float tsufra;
int i,j,n,m=0;
long int siz,siz1;
FILE *fill_et,*fill_sh;
clrscr();
for(i=0;i<257;i++)
{
alfavit[i].ch=0;
alfavit[i].chastota=0;
key[i].ch=0;
key[i].chastota=0;
}
siz=0;
cout<<"Enter file name (ETALON) > ";
cin>>filename;
fill_et=fopen(filename,"r");
while(!feof(fill_et)) //Formyjemo 1tab
{
siz++;
symbol=fgetc(fill_et);
if(symbol!=-1)
{
alfavit[symbol].ch=symbol;
alfavit[symbol].chastota++;
}
}
for(j=0;j<255;j++) //Sortyvannja
for(i=0;i<255;i++)
if(alfavit[i+1].chastota>alfavit[i].chastota)
{
tsufra=alfavit[i+1].chastota;
alfavit[i+1].chastota=alfavit[i].chastota;
alfavit[i].chastota=tsufra;
symbol=alfavit[i+1].ch;
alfavit[i+1].ch=alfavit[i].ch;
alfavit[i].ch=symbol;
}
for(i=0;i<256;i++)
{
if(alfavit[i].chastota==0) break;
alfavit[i].chastota=alfavit[i].chastota/siz;
}
n=i;
siz1=0;
fclose(fill_et);
fill_et=fopen("shufr.bin","r");
while(!feof(fill_et)) //Formyjemo 2tab
{
siz1++;
symbol=fgetc(fill_et);
if(symbol!=-1)
{
key[symbol].ch=symbol;
key[symbol].chastota++;
}
}
for(j=0;j<255;j++) //Sortyvannja
for(i=0;i<255;i++)
if(key[i+1].chastota>key[i].chastota)
{
tsufra=key[i+1].chastota;
key[i+1].chastota=key[i].chastota;
key[i].chastota=tsufra;
symbol=key[i+1].ch;
key[i+1].ch=key[i].ch;
key[i].ch=symbol;
}
for(i=0;i<256;i++)
{
if(key[i].chastota==0) break;
key[i].chastota=key[i].chastota/siz1;
}
m=i;
fclose(fill_et);
fill_et=fopen("deshufr_2.txt","w");
fill_sh=fopen("shufr.bin","r");
while(!feof(fill_sh)) //Deshufryvannja
{
symbol=fgetc(fill_sh);
if(symbol!=-1)
for(i=0;i<m;i++)
if(symbol==key[i].ch)
fprintf(fill_et,"%c",alfavit[i].ch);
}
fclose(fill_et);
fclose(fill_sh);
}
Текст дешифрованого файлу
Tacenre sboeementff1lar Tacenre _boeement MD_boeementD' sccim-snaer tle x00u.pb Ieorain SES,wfx00u.pb R0dban .eIe0i-ment 6at Ieorain SES, snh oe0steh
a0er MDgi
tysoeD'EfLu dranb tle gi
tysoew uid sboee ti pe pidnh pu s00 i
tle teomr snhfcinhatainr i
tle _boeementE ff1le gi
tysoe ar hartoapdteh Dsr arDw yatlidt ysoosntu i
snu Aanhw e)-oerrehfio am-0aehw anc0dhanbw pdt nit 0amateh ti ysoosntu i
atnerr
io snuf-sotacd0so -do-ireE ;n ni eIent ya00 tle _dtlio pe 0asp0e ti uid
io snufr-ecas0w ancahents0w anhaoectw cinreFdentas0 io snu itleo hsmsber csdreh puftle drew mardrew io tle anspa0atu ti dre i
tle gi
tysoew anc0dhanb snu 0irtf-oi
atr io 0irt rsIanbrw eIen a
_dtlio lsr peen shIareh i
tle -irrapa0atufi
rdcl hsmsberEff1le gi
tysoe ar iyneh pu x0el OdrcldA MD_dtlioD' snh ar 2i-uoablt Mc' k,,,Cfk,,? x0el OdrcldAE 1i dre tlar gi
tysoe in s -eomsnent psrar io
io cimmeocas0f-do-irerw uid mdrt oebarteo at pu
a00anb tle rd--0aeh oebartostain
iom snhfrenhanb at ti tle _dtlioE Oid hin|t neeh ti oebarteo gi
tysoe a
uid dre atfe)c0draIe0u yatl vsnhs00 Nuhe|r Nabl TeIe0 _rremp0uE ;
uid soe s0oeshu sfoebarteoeh x00u.pb dreow uid hin|t neeh ti oeCoebarteo tle gi
tysoe sbsanEf;
tle gi
tysoe ar oebarteoeh ti s cim-snu io iobsna3stainw snu -eorin yatlanftle cim-snu io iobsna3stain lsr tle oablt ti dre at st yioAE Oid msu anrts00ftle oebarteoeh gi
tysoe in snu ndmpeo i
rtiosbe heIacerw 0aAe lsoh harArwf
0i--u harAr etcE snh soe s00iyeh ti msAe snu ndmpeo i
pscAd- ci-aer i
tlarfgi
tysoeEffOid soe nit s00iyeh ti miha
uw hecim-a0ew harsrremp0e io oeIeore enbaneeoftle gi
tysoe e)ce-t snh in0u ti tle e)tent tlst rdcl sctaIatu ar e)-oerr0uf-eomatteh pu s--0acsp0e 0syE Oid soe nit s00iyeh ti hartoapdte io dre snuf-sotr i
tle gi
tysoe re-soste0uE Oid msu msAe snh hartoapdte ci-aer i
tlarfgi
tysoe -oiIaheh tlst s' tle ci-u cintsanr s00
a0er
oim tle ioabans0fhartoapdtain snh tlere
a0er oemsan dnclsnbeh( p' a
uid hartoapdte snufitleo
a0er M
io e)sm-0ew -0dbanr' tibetleo yatl tle gi
tysoew tleu mdrt pefc0eso0u msoAeh sr rdcl snh tle cinhatainr i
tleao dre csnnit pe mioefoertoactaIe tlsn cinhatainr i
tlar _boeement( snh c' uid ci00ect ni
eefMe)ce-t
io tosnr-iot mehasw 0aAe 2. io harAette'w eIen a
uido hartoapdtainfcintsanr shhatains0
a0erEffOid soe s00iyeh ti heIe0i- snh hartoapdte uido iyn -0dbanr CC .unsmac TanAfTaposoaer tlst cinnect ti tle gi
tysoe snh msAe dre i
tle
dnctainrfam-0ementeh an tle gi
tysoe CC
oee i
clsobe -oiIaheh tlst s' uido -0dbanrfcintsan ni
estdoer tlst -eordshe io
ioce dreo ti oebarteo tlemw io 0amatf
dnctains0atu i
dnoebarteoeh -0dbanr( p' uid s00iy
oee hartoapdtain i
uidof-0dbanr in tle cinhatainr rama0so ti tlst i
tle gi
tysoe( snh c' uid ci00ectfni
ee Me)ce-t
io tosnr-iot mehasw 0aAe 2. io harAette'E ;
uid ysnt tifheIe0i- cimmeocas0 -0dbanw -0esre cintsct _dtlio
io s r-ecas0 _boeementEff1le hartoapdtain anc0dher
a0er Rg_R;E.TT snh .L"NGTRE.TT tlst soe tlefPacoiri
tMv' vehartoapdtsp0e
a0erE 1lere
a0er rlid0h pe anrts00eh in0u anftle haoectiou yleoe tle gi
tysoe oeraherE Oid rlid0h dre rd--0aeh Rg_R;E.TTfin0u in Yanhiyr 41Mv' ?E,E Oid soe nit s00iyeh ti hartoapdte Rg_R;E.TT iof.L"NGTRE.TT re-soste0u
oim tle gi
tysoeEff1lar _boeement ciIeor in0u tle sctds0 Ieorain SES, i
tle x00u.pb snhfIeorain SES, i
tle x00u.pb R0dban .eIe0i-ment 6atE _00 itleo Ieorainr soefciIeoeh pu re-soste Tacenre _boeementrEf
Висновок: при виконанні даної лабораторної роботи я вивчив прості методи шифрування та дешифрування інформації та їх особливості.