Вы находитесь на странице: 1из 5

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ


ЛИПЕЦКИЙ ГОСУДАРСТВЕННЫЙ ПЕДАГОГИЧЕСКИЙ УНИВЕРСИТЕТ

Кафедра прикладной математики и информационных технологий

ЛАБОРАТОРНАЯ РАБОТА №1

по теории информации и кодирования

на тему:
Вскрытие шифра замены

Выполнила:
Студентка ФФМиКН
Группы ПМИ-4(С)
Чан Вьет Киен

Проверила:
к. т. н., доц. Шуйкова И.А.

Липецк 2009 г.
Цель работы: ознакомление с принципами шифрования и
дешифрование при помощи шифра замены.

Шифр Цезаря
Сведения о шифре: алфавит размещается на круге по часовой стрелке
(при этом в русском алфавите после буквы Я следует буква А). Для
зашифровки буквы текста заменяются буквами, стоящими по кругу на
заданное число букв дальше по часовой стрелке. Каждый i-ый символ
преобразуется в (i+s) –ый символ, где s-сдвиг алфавита.

Принцип дешифрования: известны вероятности букв р i (i=1..n) в языке


сообщения (n число букв в алфавите). Посчитаем частоты букв f i в
зашифрованном тексте. Если оно не очень короткое , то f i должны хорошо
согласовываться с р i : f i = р i . Затем начнём делать перебор по сдвигам.
Когда сдвиг не угадан, общее различие между р i и f i (s), разное
n
s   | p i  f i (s)| (1)
i 1

будет велико, а когда сдвиг угадан –мало. Минимизация s по всем s=1..n


даёт ключ к расшифровке шифра Цезаря.

Зашифрованный текст (вариант 3)

ЖВЛБВЕЖРЧФДФБЖЬУЖВЛБВЧВЬГВЯБВЧВЦПГВЯБЩБЬУЦЕЩЙЮВАФ
БШЮВБЖДВЯРШВЕЖЗГФЧФДФБЖЬУЖВЧВЛЖВДФЫЯЬЛБПЩЧДЗГГПЯ
ЬКЬАЩТЖДФЫЯЬЛБПЭШВЕЖЗГЮЬБИВДАФКЬВББПАВХОЩЮЖФАЬС
ЖЬВЧДФБЬЛЩБЬУШВЕЖЗГФГВЕЖВУББВЦПГВЯБУТЖЕУЮВБЖДВЯЬДЗ
ЩАВЕЖРЧФДФБЖЬУЖВЧВЛЖВЦЯТХВЭАВАЩБЖАВЪЩЖХПЖРГДВЬЫ
ЦЩШЩБФГВЯБВКЩББФУГДВЦЩДЮФЯТХВЧВЮВАГВБЩБЖФГДВЧДФ
ААБВЧВЮВАГЯЩЮЕФЮВБЖДВЯРЬШЩБЖЬИЬЮФКЬЬЧФДФБЖЬУЖВЧ
ВЛЖВЮЯЬЩБЖГВШЮЯТЛЩББПЭЦШФББПЭАВАЩБЖЮЕЬЕЖЩАЩУЦ
ЯУЩЖЕУЬАЩББВЖЩАЫФЮВЧВЕЩХУЦПШФЩЖЗЕЖВЭЛЬЦВЕЖРЮЗ
АПМЯЩББПАЕХВУАЧФДФБЖЬУЖВЧВЛЖВГДЬЗАПМЯЩББВАЦБЩЕЩБ
ЬЬВМЬХВЮЦГДЩШЩЯФЙЫФДФБЩЩВЧВЦВДЩББПЙБВДАЕЬЕЖЩАФ
ХЗШЩЖЦЩЕЖЬЕЩХУЖФЮЮФЮВЧВЦВДЩБВЫФДФБЩЩВШБВЭЬЫГ
ЩДЦПЙАВШЩЯЩЭХПЯФВГЗХЯЬЮВЦФББФУЦАВШЩЯРХЬХФЕВЧЯФЕ
БВЩЭ

Таблица частот появления символов в русском техническомтексте и в зашифрованном сообщении

2
букв в техническом тексте в зашифрованном сообщении

А 0.0805336493899196 0.0439739413680782
Б 0.0150582729330963 0.0928338762214984
В 0.043321025360502 0.133550488599349
Г 0.0164258254699062 0.0325732899022801
Д 0.029402379541414 0.0439739413680782
Е 0.0835422649709015 0.0374592833876222
Ж 0.00970962301135069 0.0732899022801303
З 0.0155445138350732 0.0162866449511401
И 0.0836182401118354 0.00325732899022801
Й 0.0135387701144186 0.00651465798045603
К 0.0381091306924374 0.00651465798045603
Л 0.0402668246949598 0.0179153094462541
М 0.0323198249532753 0.00488599348534202
Н 0.0669037091063804 0
О 0.102460075063439 0.00162866449511401
П 0.029539134795095 0.0260586319218241
Р 0.0525292124416891 0.011400651465798
С 0.0560240689246479 0.00162866449511401
Т 0.066797343909073 0.00814332247557003
У 0.0221999361808816 0.0293159609120521
Ф 0.00483201896339518 0.0667752442996743
Х 0.00828129036179362 0.0211726384364821
Ц 0.00437616811779186 0.0293159609120521
Ч 0.0142833264955706 0.0325732899022801
Ш 0.00439136314597864 0.0228013029315961
Щ 0.00294783546823479 0.0765472312703583
Ъ 0.000349485648295878 0.00162866449511401
Ь 0.0174438923584203 0.0602605863192182
Ы 0.0184163741623741 0.011400651465798
Э 0.00305420066554223 0.0130293159609121
Ю 0.00537903997811916 0.0342019543973941
Я 0.0184011791341873 0.0390879478827362

Блок-схема
3
start

//открыт соответствующих файлов


StreamReader re = new StreamReader(file1,
System.Text.Encoding.GetEncoding(1251));
StreamReader re1 = new StreamReader(file2,
System.Text.Encoding.GetEncoding(1251));

anytext.txt, testtext.txt

//подсчёт частотности появления букв в тексте


static double[] frequency(string a, string b)

//определение ключа
static int min(double[] p, double[] p1)

//сделать вывод
static void shift(string file1, string file2)

DescriptionText.txt

close

Функция для определения ключа шифра


static double sum(double[] a, double[] b,int k) //определение  (S )
{
double sum = 0;
for (int i = 0; i < a.Length; i++)
sum = sum +Math.Abs(a[i] - b[(i + k) % 32]);
return sum;
}

4
static int min(double[] p, double[] p1) // определения ключа шифра
{
int shift=0;
double[] s = new double[32];
for (int i = 0; i < 32; i++)
s[i] = sum(p, p1, i);
double min = s[0];
for (int i = 0; i < 32; i++)
if (s[i] < min)
min = s[i];
for (int i = 0; i < 32; i++)
if (s[i] == min)
shift = i;
return shift;
}
Результат работы программы:
ТОЧНОСТЫГАРАНТЗЯТОЧНОГОЗПОЛНОГОВЬПОЛНЕНЗЯВСЕХКОМАНДКОНТРОЛЫДОСТУПАГАРАНТ
ЗЯТОГОЧТОРАИЛЗЧНЬЕГРУППЬЛЗЦЗМЕЮТРАИЛЗЧНЬЙДОСТУПКЗНФОРМАЦЗОННЬМОБЪЕКТАМЗЭТЗОГР
АНЗЧЕНЗЯДОСТУПАПОСТОЯННОВЬПОЛНЯЮТСЯКОНТРОЛЗРУЕМОСТЫГАРАНТЗЯТОГОЧТОВЛЮБОЙМОМЕН
ТМОЖЕТБЬТЫПРОЗИВЕДЕНАПОЛНОЦЕННАЯПРОВЕРКАЛЮБОГОКОМПОНЕНТАПРОГРАММНОГОКОМПЛЕКСА
КОНТРОЛЫЗДЕНТЗФЗКАЦЗЗГАРАНТЗЯТОГОЧТОКЛЗЕНТПОДКЛЮЧЕННЬЙВДАННЬЙМОМЕНТКСЗСТЕМЕЯВ
ЛЯЕТСЯЗМЕННОТЕМИАКОГОСЕБЯВЬДАЕТУСТОЙЧЗВОСТЫКУМЬШЛЕННЬМСБОЯМГАРАНТЗЯТОГОЧТОПРЗ
УМЬШЛЕННОМВНЕСЕНЗЗОШЗБОКВПРЕДЕЛАХИАРАНЕЕОГОВОРЕННЬХНОРМСЗСТЕМАБУДЕТВЕСТЗСЕБЯТ
АККАКОГОВОРЕНОИАРАНЕЕОДНОЙЗИПЕРВЬХМОДЕЛЕЙБЬЛАОПУБЛЗКОВАННАЯВМОДЕЛЫБЗБАСОГЛАСН
ОЕЙ

Вам также может понравиться