Міністерство освіти і науки України
Національний університет „Львівська політехніка”
Кафедра електронних
обчислювальних машин
Звіт
про виконання лабораторної роботи № 1
з курсу „ Захист інформації в комп’ютерних системах ”
Тема:
Шифр Цезаря.
Виконав:
ст. гр. КІ-4
Львів – 2005
Мета роботи: Ознайомитися із алгоритмом шифрування Цезаря та створити програму, що дозволяє шифрувати та дешифрувати текст за допомогою цього алгоритму.
Теоретичні відомості:
Насправді достовірно не відомо, коли з'явився тайнопис, але глиняна табличка, зроблена приблизно 1500 років до нашої ери, містить один з найперших її прикладів. Греки використовували коди принаймні з 475 року до нашої ери, а вищі кола в Римі використовували прості шифри в період царювання Юлія Цезаря. На початку нашої ери інтерес до криптографії (також, як і до інших інтелектуальних занять) впав; єдиними, хто іноді застосовував її, були ченці. З настанням епохи відродження мистецтво криптографії стало розцвітати. За часів Луї ХIV в Франції для урядових повідомлень використовувалося шифрування, засноване на 587 довільно набраних ключах.
У ХIX столітті розвитку криптографії сприяв винахід телеграфу і азбуки Морзе. Азбука Морзе була першим двійковим представленням (крапка і тире) алфавіту, яке одержало широке розповсюдження.
У першу світову війну у ряді країн були розроблені "шифрувальні машини", які дозволяють легко кодувати і декодувати текст, використовуючи складний шифр. З цієї миті історія криптографії стає історією дешифрації кодів.
До того, як для кодування і декодування стали використовуватись механічні пристрої, складні шифри застосовувалися не часто, оскільки вимагали багато часу і сили для кодування і декодування. Тому більшість кодів можна було розшифрувати за відносно короткий проміжок часу. Проте, дешифрація стала набагато складнішою, коли стали застосовуватися шифрувальні машини. Хоча сучасні комп'ютери могли б розшифрувати ці коди відносно легко, але навіть комп'ютери не можуть наблизитися до видатного таланту Герберта Ядлея, який дотепер вважається найвидатнішим дешифрувальником всіх часів. В 1915 році у свій вільний час він розшифрував дипломатичний код США, а потім у 1922 році дипломатичний код Японії, хоча він навіть не знав японської мови.
Під час другої світової війни головний метод дешифрації кодів ґрунтувався на крадіжці ворожої дешифрувальної машини, таким чином можна було уникнути втомливого процесу розшифрування кодів. Фактично володіння службою Аллеса німецькою шифрувальною машиною, що було не відоме Німеччині, сприяло в певній мірі результату війни.
З приходом комп'ютерів, особливо розрахованих на багато користувачів, необхідність в засекреченні інформації і в стійких кодах стала ще гострішою. Необхідно не тільки захищати файли, але і управляти доступом власне до комп'ютера. Було розроблено багато методів шифрування файлів даних і алгоритм DES (Стандарт шифрування даних), прийнятий Національним бюро стандартів США, довший час вважалося, що його неможливо розшифрувати.
Суть алгоритму Цезаря полягає у заміні кожної літери в повідомленні на іншу, зсунуту в алфавіті на певну кількість знаків (в оригіналі на 3). Дешифрація виконується у зворотньому порядку, тобто зсувом кожної літери зашифрованого повідомлення на 3 знаки назад. В комп’ютерній реалізації в якості алфавіту використовується таблиця символів ASCII, або ж бінарний код символу (байт).
Текст програми:
void encrypt() //функція шифрування файлу
{
char ch, ch_enc;
puts("\n\t\tENCRYPTING STARTED");
ch=ch_enc=fgetc(in);
while (!feof(in)) {
printf("\n %c (%d)",ch_enc,ch_enc);
if (isalpha(ch)) { // якщо літера, то "шифруємо", ch_enc=ch_enc+K; // якщо ні - залишаємо те, що було
if ( ch>='A' && ch<='Z' && ch_enc>'Z' ) {
ch_enc=ch_enc-26;
}// A – Z
if ( ch>='a' && ch<='z' && ch_enc>'z' ) {
ch_enc=ch_enc-26;
}// a - z
printf(" => encrypted: %c (%d)",ch_enc,ch_enc);
}
fputc(ch_enc,out);
ch=ch_enc=fgetc(in);
}
}
void decrypt() //функція дешифрування файлу (відновлення оригінального тексту)
{
char ch, ch_dec;
puts("\n\t\tDECRYPTING STARTED");
ch=ch_dec=fgetc(in);
while (!feof(in)) {
printf("\n %c (%d)",ch_dec,ch_dec);
if (isalpha(ch)) { // якщо літера, то "дешифруємо",
ch_dec=ch_dec-K; // якщо ні - залишаємо те, що було
if ( ch>='A' && ch<='Z' && ch_dec<'A' ) {
ch_dec=ch_dec+26;
}// A - Z
if ( ch>='a' && ch<='z' && ch_dec<'a' ) {
ch_dec=ch_dec+26;
}// a - z
printf(" => decrypted: %c (%d)",ch_dec,ch_dec);
}
fputc(ch_dec,out);
ch=ch_dec=fgetc(in);
}
}
Результати роботи програми:
Оригінальний текстовий файл:
In programming, you are often faced with situations where you need to execute a particular action, but
you don't know in advance which method, or even which object, you'll want to call upon to execute that
action. For example, a button might know that it must notify some object when it is pushed, but it might
not know which object or objects need to be notified. Rather than wiring the button to a particular
object, you will connect the button to a delegate and then resolve that delegate to a particular method
when the program executes.
In the early, dark, and primitive days of computing, a program would begin execution and then
proceed through its steps until it completed. If the user was involved, the interaction was strictly
controlled and limited to filling in fields.
Зашифрований файл:
Lq surjudpplqj, brx duh riwhq idfhg zlwk vlwxdwlrqv zkhuh brx qhhg wr hahfxwh d sduwlfxodu dfwlrq, exw
brx grq'w nqrz lq dgydqfh zklfk phwkrg, ru hyhq zklfk remhfw, brx'oo zdqw wr fdoo xsrq wr hahfxwh wkdw
dfwlrq. Iru hadpsoh, d exwwrq pljkw nqrz wkdw lw pxvw qrwlib vrph remhfw zkhq lw lv sxvkhg, exw lw pljkw
qrw nqrz zklfk remhfw ru remhfwv qhhg wr eh qrwlilhg. Udwkhu wkdq zlulqj wkh exwwrq wr d sduwlfxodu
remhfw, brx zloo frqqhfw wkh exwwrq wr d ghohjdwh dqg wkhq uhvroyh wkdw ghohjdwh wr d sduwlfxodu phwkrg
zkhq wkh surjudp hahfxwhv.
Lq wkh hduob, gdun, dqg sulplwlyh gdbv ri frpsxwlqj, d surjudp zrxog ehjlq hahfxwlrq dqg wkhq
surfhhg wkurxjk lwv vwhsv xqwlo lw frpsohwhg. Li wkh xvhu zdv lqyroyhg, wkh lqwhudfwlrq zdv vwulfwob
frqwuroohg dqg olplwhg wr iloolqj lq ilhogv.
Висновок: виконуючи цю лабораторну роботу, я вивчив алгоритм шифрування Цезаря та реалізував його програмно.