Блочный шифр ТЕА
Разработка программы кодирования текстового файла при помощи блочного алгоритма шифрования ТЕА типа "Сеть Фейштеля", который основан на битовых операциях с 64-битным блоком и имеет 128-битный ключ шифрования. Результаты кодирования и декодирования.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лабораторная работа |
Язык | русский |
Дата добавления | 18.07.2013 |
Размер файла | 299,9 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
«ТИХООКЕАНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»
Лабораторная работа №3
по дисциплине: Методы и средства защиты информации
на тему: «Блочный шифр ТЕА»
Выполнил:
студент гр. ВМ-91
Анисимов А.В.
Проверил: Сай С.В.
Хабаровск, 2013г.
Цель: произвести кодирование текстового файла при помощи блочного алгоритма шифрования ТЕА.
Ход работы:
ТЕА (Tiny Encryption Algorithm) - блочный алгоритм шифрования типа «Сеть Фейштеля». Он основан на битовых операциях с 64-битным блоком, имеет 128-битный ключ шифрования. Стандартное количество раундов сети Фейштеля равно 64 (32 цикла).
Суть заключается в том, что исходный текст разбивается на блоки по 64 бита каждый. 128-битный ключ К делится на четыре 32-битных подключа K0, K1, K2 и K3. На этом подготовительный процесс заканчивается, после чего каждый 64-битный блок шифруется на протяжении 32 циклов (64 раундов) по нижеприведённому алгоритму.
Листинг программы:
#include<vcl.h>
#include <math.h>
#include <stdint.h>
#pragma hdrstop
#include "Unit1.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
AnsiStringsp();
AnsiStringsl();
AnsiStringDv();
AnsiStringslj32(char A,char B);
AnsiStringsloj(AnsiStringA,AnsiString B);
AnsiStringxor();
int Des();
TForm1 *Form1;
AnsiStrings,m;
int Key =256;
AnsiString key="01010101010101010101010101010101";//key
AnsiString Delta ="10011110001101110111100110111001";
AnsiStringvch(char A,char B);
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
AnsiStringvch(char A,char B)
{
if (A=='1')
if (B=='1')
return("0");
else return("1");
else
if (B=='1')
return("-1");
else return("0");
}
AnsiString vj(AnsiString A,AnsiString B)
{
AnsiString res ="00000000000000000000000000000000" ;
char p='0';
for(int i=A.Length();i>=1;i--)
{
if (p=='0')
{
if (slj32(A[i],B[i])=="2")
{
res[i]='0';
p='1';
}
else
if (slj32(A[i],B[i])=="1")
{
res[i]='1';
p='0';
}
else
res[i]='0';
}
else
{
if (slj32(A[i],B[i])=="2")
{
res[i]='1';
p='1';
}
else
if (slj32(A[i],B[i])=="1")
{
res[i]='0';
p='1';
}
else
{
res[i]='1';
p='0';
}
}
}
return(res);
}
AnsiString xor(AnsiString A,AnsiString B)
{
AnsiString res="00000000000000000000000000000000";
if (A!=B)
res=sloj(A,B);
return(res);
}
AnsiString slj32(char A,char B)
{
if(A==B=='1')
return("2");else
if(A!=B)
return("1");else
return("0");
}
AnsiString sloj(AnsiString A,AnsiString B)
{
AnsiString res ="00000000000000000000000000000000" ;
char p='0';
for(int i=A.Length();i>=1;i--)
{
if (p=='0')
{
if (slj32(A[i],B[i])=="2")
{
res[i]='0';
p='1';
}
else
if (slj32(A[i],B[i])=="1")
{
res[i]='1';
p='0';
}
else
res[i]='0';
}
else
{
if (slj32(A[i],B[i])=="2")
{
res[i]='1';
p='1';
}
else
if (slj32(A[i],B[i])=="1")
{
res[i]='0';
p='1';
}
else
{
res[i]='1';
p='0';
}
}
}
return(res);
}
AnsiString sp(AnsiString S,int n)
{
AnsiString p;
for (int c=1;c<=n;c++)
{
for (int i=S.Length()-1;i>=1;i--)
S[i+1]=S[i];
S[1]='0';
}
return (S);
}
AnsiString sl(AnsiString S,int n)
{
AnsiString p;
for (int c=1;c<=n;c++)
{
for (int i=1;i<=S.Length()-1;i++)
S[i]=S[i+1];
S[S.Length()]='0';
}return (S);
}
AnsiString Dv(char c)
{AnsiString l="";
int k=c;
if (k<0)
k=k+256;
while (k>1)
{
l=IntToStr(k % 2)+l;
k=k/2;
}
if (k==0)
l="00000000";
else
l="1"+l;
while (l.Length()!=8)
l="0"+l;
return(l);
}
int Des(AnsiString k)
{
int c=0;
for (int i=1;i<=8;i++)
c=c+StrToInt(k[i])*pow(2,k.Length()-i);
return(c);
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (OpenDialog1->Execute())
Memo1->Lines->LoadFromFile(OpenDialog1->FileName);
}
/////////////////////Кодирование//////////////////////////////////////////////
void __fastcall TForm1::Button8Click(TObject *Sender)
{
s=Memo1->Text;
for (int i =1;i<=s.Length();i++)
{
m=m+Dv(s[i]);
}
AnsiString M;
AnsiString l;
for (int i =1;i<=s.Length();i++)
{
M=M+Dv(s[i]);
}
int kol=M.Length()/64;
int ost;
if (M.Length()!=kol*64)
ost=(kol+1)*64-M.Length();
else
ost=0;
if (ost>0)
for (int i=1;i<=ost;i++)
M=M+"1";
AnsiString v1,v0;
for (int i=0;i<=M.Length()/64;i+=2)
{
AnsiString sum="00000000000000000000000000000000";
v0=M.SubString(32*i+1,32);
v1=M.SubString(32*i+33,32);
for (int j=0;j<32;j++)
{
sum=sloj(sum,Delta);
AnsiString p=sl(v1,4);//v1<<4
p=sloj(p,key);//(v1<<4) + k0
AnsiString p1=sloj(v1,sum);//v1+sum
p=xor(p,p1);//((v1<<4) + k0))^(v1+sum)
AnsiString p2=sp(v1,5);//v1>>5
AnsiString p3=sloj(p2,key);//v1>>5+k1
AnsiString p4=xor(p,p3);//all
v0=sloj(v0,p4);//+=
p=sl(v0,4);//v0<<4
p1=sloj(p,key);//v0<<4+k2
p=sloj(v0,sum);//v0+sum
p=xor(p,p1);//(v0<<4+k2)^(v0+sum)
p2=(sp(v0,5));//v0>>5;
p3=sloj(p2,key);//v0>>5+k1;
p4=xor(p,p3);// ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3)
v1=sloj(v1,p4);//+=
}
Memo2->Text=Memo2->Text+v0+v1;
}
AnsiString re=Memo2->Text;
AnsiString q="";
Memo2->Clear();
for (int i=1;i<=re.Length();i+=8)
{
q="";
for (int j=i;j<=i+7;j++)
q=q+re[j];
Memo2->Text=Memo2->Text+char(Des(q));
}
}
void __fastcall TForm1::Button10Click(TObject *Sender)
{
ShowMessage(0xC6EF3720);
}
//////////Декодирование//////////////////////////////////////////
void __fastcall TForm1::Button2Click(TObject *Sender)
{
s=Memo1->Text;
for (int i =1;i<=s.Length();i++)
{
m=m+Dv(s[i]);
}
AnsiString M;
AnsiString l;
for (int i =1;i<=s.Length();i++)
{
M=M+Dv(s[i]);
}
int kol=M.Length()/64;
int ost;
if (M.Length()!=kol*64)
ost=(kol+1)*64-M.Length();
else
ost=0;
if (ost>0)
for (int i=1;i<=ost;i++)
M=M+"1";
AnsiString v1,v0;
for (int i=0;i<=M.Length()/64;i+=2)
{
AnsiString sum="00000000000000000000000000000000";
v0=M.SubString(32*i+1,32);
v1=M.SubString(32*i+33,32);
for (int j=0;j<32;j++)
{
sum=sloj(sum,Delta);
AnsiString p=sl(v1,4);//v1<<4
p=sloj(p,key);//(v1<<4) + k0
AnsiString p1=sloj(v1,sum);//v1+sum
p=xor(p,p1);//((v1<<4) + k0))^(v1+sum)
AnsiString p2=sp(v1,5);//v1>>5
AnsiString p3=sloj(p2,key);//v1>>5+k1
AnsiString p4=xor(p,p3);//all
v0=sloj(v0,p4);//+=
p=sl(v0,4);//v0<<4
p1=sloj(p,key);//v0<<4+k2
p=sloj(v0,sum);//v0+sum
p=xor(p,p1);//(v0<<4+k2)^(v0+sum)
p2=(sp(v0,5));//v0>>5;
p3=sloj(p2,key);//v0>>5+k1;
p4=xor(p,p3);// ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3)
v1=sloj(v1,p4);//+=
}
Memo2->Text=Memo2->Text+v0+v1;
}
AnsiString re=Memo2->Text;
AnsiString q="";
Memo2->Clear();
for (int i=1;i<=re.Length();i+=8)
{
q="";
for (int j=i;j<=i+7;j++)
q=q+re[j];
Memo2->Text=Memo1->Text+char(Des(q));
}
}
блочный шифр кодирование алгоритм
Результат работы программы
Кодирование
Декодирование
Вывод: в данной работе было произведено кодирование текста при помощи блочного алгоритма шифрования ТЕА.
Размещено на Allbest.ru
Подобные документы
Исследование симметричных алгоритмов блочного шифрования. Минусы и плюсы алгоритма IDEA. Разработка программы аутентификации пользователя и сообщений на основе алгоритма IDEA. Выбор языка программирования. Тестирование и реализация программного средства.
курсовая работа [314,2 K], добавлен 27.01.2015Симметрическое шифрование как способ шифрования, в котором применяется один и тот же криптографический ключ. Функции стандартного диалогового окна открытия и сохранения файла. Характерная схема действий при генерации подписи. Цифровая подпись файла.
курсовая работа [641,5 K], добавлен 14.06.2011Симметричные и асиметричные методы шифрования. Шифрование с помощью датчика псевдослучайных чисел. Алгоритм шифрования DES. Российский стандарт цифровой подписи. Описание шифрования исходного сообщения асимметричным методом с открытым ключом RSA.
курсовая работа [101,1 K], добавлен 09.03.2009Реализация алгоритма DES и режимов шифрования для любой длины сообщения и любой длины ключа. Шифрование сообщений различной длины и ключа с замериванием времени и скорости шифрования. Реализация алгоритма RSA. Сохранение зашифрованного файла на диск.
курсовая работа [398,4 K], добавлен 26.01.2010Симметричные криптосистемы как способ шифрования, в котором для шифрования и расшифровывания применяется один и тот же криптографический ключ. Разбор и реализация шифрования алгоритма: простая и двойная перестановка, перестановка "магический квадрат".
курсовая работа [3,3 M], добавлен 11.03.2013Проблема скрытия и защиты информации от несанкционированного использования. История создания шифра. Решения задачи шифрования текста и кодирования данных. Тестирование полученного приложения и анализ работы программы с точки зрения пользователя.
курсовая работа [3,0 M], добавлен 24.11.2013Схема работы и требования к программам шифрования и дешифрования. Алгоритмы и тексты программы шифрования и программы дешифрования, выполненные на языке программирования C/C++. Содержание файла с исходным текстом, с шифротекстом, с дешифрованным текстом.
курсовая работа [24,7 K], добавлен 20.10.2014Разработка приложения для шифрования данных с помощью алгоритма DES5: процесс шифрования, расшифрования, получение ключей. Спецификация программы, процедуры и функции; описание интерфейса пользователя. Реализация задачи в среде программирования DELPHI.
курсовая работа [812,6 K], добавлен 27.03.2012Криптографические методы обеспечения конфиденциальности, невозможности прочтения информации посторонним. Современные методы шифрования информации как обратимого преобразования открытого текста в шифрованный на основе секретного алгоритма или ключа.
презентация [514,3 K], добавлен 06.02.2016Реализация программы, кодирующей входную строку, используя аффинный и аффинный рекуррентный шифр. Пример шифрования с помощью аффинного шифра. Описание алгоритма работы программы. Ознакомление с криптоанализом. Частота использования английских букв.
отчет по практике [445,6 K], добавлен 22.11.2016