close

Вход

Забыли?

вход по аккаунту

?

ЗД Л№1

код для вставкиСкачать
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ
НАЦИОНАЛЬНАЯ МЕТАЛЛУРГИЧЕСКАЯ АКАДЕМИЯ УКРАИНЫ
Кафедра информационных технологий и систем
ЛАБОРАТОРНАЯ РАБОТА№1
по дисциплине: "Защита данных в информационных системах"
тема: "Шифрование методами замены"
Проверила доцент кафедры ИТС
_______ Новикова Е.Ю.
"___" __________2011
Выполнил
студент гр. ИТС-08-1
_________Лепша Д.И. "___" __________2011
2011
1. ЗАДАНИЕ
Ознакомиться с шифрованием методами замены, запрограммировать эти методы.
2. ХОД РАБОТЫ
В криптографии рассматриваются четыре типа подстановки (замены): * моноалфавитная, * полиалфавитная,
* гомофоническая
* и полиграммная.
При моноалфавитной замене каждой букве алфавита открытого текста ставится в соответствие одна буква шифртекста из этого же алфавита.
Общая формула моноалфавитной замены выглядит следующим образом
уi = k1 хi + k2-(modn),
где уi - i-й символ алфавита k1 и k2 - константы, хi - i-й символ открытого текста (номер буквы в алфавите), n - длина используемого алфавита
Основным недостатком рассмотренного метода является то, что статистические свойства открытого текста (частоты появления букв) сохраняются и в шифртексте.
Пример:
Открытый текст: "ЛЕПША". Шифртекст: "ФЫРЗ ".
Подстановка задана табл. 1:
Алфавит исходного текстаАБВГД...
ЬЭЮЯпробелАлфавит шифртекстапробелЯЮЭЬ...
ДГВБА Полиалфавитная замена использует несколько алфавитов шифртекста Пусть используется k алфавитов Тогда открытый текст
Х = XiX-l...XkXk+\---X2kX-2k+\ ...
заменяется шифртекстом
Y = /l(^l)/2(^2) . . .A(^fc)/l(a-t+l) . . •fk{x'ik}fl(x2k+l) ••-,
где fi[x^) означает символ шифртекста алфавита г для символа открытого текста Xj.
Пример:
Открытый текст: "ЛЕПША". Шифртекст: "Ф6217З12".
Подстановка задана табл. 2:
Алфавит открытого текстаАБ...
Е...КЛ
...Япробел
Алфавит шифртекстаПробел
12
72Я
22
75...
...Ы
62
73...
...Х
23
32Ф
33
03...
...Б
35
04А
45
07 Гомофоническая замена одному символу открытого текста ставит в соответствие несколько символов шифртекста. Этот метод применяется для искажения статистических свойств шифртекста.
Пример:
Открытый текст: "ЛЕПША". Шифртекст: "3362736412".
Полиграммная замена формируется из одного алфавита с помощью специальных правил. В качестве примера рассмотрим шифр Плэйфера В этом шифре алфавит располагается в матрице Открытый текст разбивается на пары символов х^.х,^. Каждая пара символов открытого текста заменяется на пару символов из матрицы следующим образом:
* если символы находятся в одной строке, то каждый из символов пары заменяется на стоящий правее его (за последним символом в строке следует первый),
* если символы находятся в одном столбце, то каждый символ пары заменяется на символ, расположенный ниже его в столбце (за последним нижним символом следует верхний),
* если символы пары находятся в разных строках и столбцах, то они считаются противоположными углами прямоугольника Символ, находящийся в левом углу, заменяется на символ, стоящий в другом левом углу, замена символа, находящегося в правом углу, осуществляется аналогично,
* если в открытом тексте встречаются два одинаковых символа подряд, то перед шифрованием между ними вставляется специальный символ (например тире).
Пример:
Открытый текст: "ЛЕПША". Шифртекст: "ТЛЦСЫЕ".
Матрица алфавита представлена в табл. 3.
АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЗЮЯпробел-3. ЛИСТИНГ ПРОГРАММЫ
Эти методы я запрограммировала в среде Borland Builder C++. Описания этих методов находятся в файле Unit1.cpp:
#include <vcl.h>
#include <string.h>
#include <math.h>
#pragma hdrstop
#include "Unit1.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//объявление функций шифрования методами замены
char* mono_sh(char* key);
char *poli_sh(char* key);
char* gomo_sh(char* key);
char* poligr_sh(char* key);
char alf[]="АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ ";
char alf_2[][2]={"12","22","32","42","52","62","72","82","92","20" ,"13", "23", "33","43","53","63","73","83","93","30", "14", "24", "34","44","54","64", "74","84","94","40","15","25", "35","45" };
char alf_3[][2] = {"72", "75", "74", "71", "70", "73", "78", "76", "79","27","20","32","03","40","50","93","17","80","19","31","45","29","10","32","11","12","26","24","13","09","05","01","04","07"} ;
char alf_4[][7]={"АБВГДЕЁ","ЖЗИЙКЛМ","НОПРСТУ","ФХЦЧШЩЪ", "ЫЬЭЮЯ -"};
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
// моноалфавитная замена
char* mono_sh(char* key)
{
int n=strlen(key);
char Sh[256]="";
for(int j=0;j<n;j++)
{for (int i=0;i<34;i++)
{
if(key[j]==alf[i])
{Sh[j]=alf[33-i];}
}
}
return Sh;
}
// полиалфавитная замена
char *poli_sh(char* key)
{
int n=strlen(key);
int k=-1;
char Sh[256]="";
for(int j=0;j<n;j++)
{k++;
for (int i=0;i<34;i++)
{
if(key[j]==alf[i])
{
if(((j+4)%3)==2)
{Sh[k]=alf_2[i][0];
Sh[++k]=alf_2[i][1];
}
if(((j+4)%3)==0 && j>1)
{Sh[k]=alf_3[i][0];
Sh[++k]=alf_3[i][1];
}
if(((j+4)%3)==1)
{Sh[k]=alf[33-i];}
}
}
}
return Sh;
}
//гомофоническая замена
char* gomo_sh(char* key)
{
int n=strlen(key);
int k=-1;
char Sh[256]="";
for(int j=0;j<n;j++)
{k++;
for (int i=0;i<34;i++)
{
if(key[j]==alf[i])
{
Sh[k]=alf_2[i][0];
Sh[++k]=alf_2[i][1];
}
}
}
return Sh;
}
//полиграммная замена
char* poligr_sh(char* key)
{
int n=strlen(key),k=-1;
int elem[2][2], st[2];
char Sh[256]="",str[256]="";
for(int i=0;i<n+1;i++)
{ k++;
str[k]=key[i];
if(key[i]==key[i+1] && i<n)
str[++k]='-';
}
if((strlen(str)%2)!=0) strcat(str," ");
for(int j=0;j<strlen(str);j+=2)
{
for (int i=0;i<5;i++)
{
for (int k=0;k<7;k++)
{ if(str[j]==alf_4[i][k])
{elem[0][0]=i;
elem[0][1]=k;}
if(str[j+1]==alf_4[i][k])
{elem[1][0]=i;
elem[1][1]=k;}
}
}
if(elem[0][0]==elem[1][0])
{
if(elem[0][1]==6) st[0]=0;
else st[0]=elem[0][1]+1;
if(elem[1][1]==6) st[1]=0;
else st[1]=elem[1][1]+1;
Sh[j]=alf_4[elem[0][0]][st[0]];
Sh[j+1]=alf_4[elem[0][0]][st[1]];
}
if(elem[0][1]==elem[1][1])
{
if(elem[0][0]==4) st[0]=0;
else st[0]=elem[0][0]+1;
if(elem[1][0]==4) st[1]=0;
else st[1]=elem[1][0]+1;
Sh[j]=alf_4[st[0]][elem[0][1]];
Sh[j+1]=alf_4[st[1]][elem[0][1]];
}
if(elem[0][0]!=elem[1][0] && elem[0][1]!=elem[1][1])
{
st[0]=elem[1][0];
st[1]=elem[0][0];
Sh[j]=alf_4[st[0]][elem[0][1]];
Sh[j+1]=alf_4[st[1]][elem[1][1]];
}
}
return Sh;
}
//обработчик события нажатие кнопки "Шифр"
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char *key;
if(ComboBox1->Text=="моноалфавитная")
{
key=new char [strlen((Edit1->Text).c_str())+1];
strcpy(key,(Edit1->Text).c_str());
Label1->Caption=AnsiString(mono_sh(key));
}
if(ComboBox1->Text=="полиалфавитная")
{
key=new char [strlen((Edit1->Text).c_str())+1];
strcpy(key,(Edit1->Text).c_str());
Label1->Caption=AnsiString(poli_sh(key));
}
if(ComboBox1->Text=="гомофоническая")
{
key=new char [strlen((Edit1->Text).c_str())+1];
strcpy(key,(Edit1->Text).c_str());
Label1->Caption=AnsiString(gomo_sh(key));
}
if(ComboBox1->Text=="полиграммная")
{
key=new char [strlen((Edit1->Text).c_str())+1];
strcpy(key,(Edit1->Text).c_str());
Label1->Caption=AnsiString(poligr_sh(key));
}
4. РЕЗУЛЬТАТ
2
Документ
Категория
Рефераты
Просмотров
25
Размер файла
163 Кб
Теги
1/--страниц
Пожаловаться на содержимое документа