Блочный шифр ТЕА

 

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ

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

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

«ТИХООКЕАНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»








Лабораторная работа №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();();();(char A,char B);(AnsiStringA,AnsiString B);();Des();*Form1;,m;Key =256;key="01010101010101010101010101010101";//keyDelta ="10011110001101110111100110111001";(char A,char B);

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{


}(char A,char B)

{(A=='1')(B=='1')("0");return("1");(B=='1')("-1");return("0");

}vj(AnsiString A,AnsiString B)

{res ="00000000000000000000000000000000" ;p='0';(int i=A.Length();i>=1;i--)

{(p=='0')

{(slj32(A[i],B[i])=="2")

{[i]='0';='1';

}(slj32(A[i],B[i])=="1")

{[i]='1';='0';

}[i]='0';

}

{(slj32(A[i],B[i])=="2")

{[i]='1';='1';

}(slj32(A[i],B[i])=="1")

{[i]='0';='1';

}

{[i]='1';='0';

}

}

}(res);

}xor(AnsiString A,AnsiString B)

{res="00000000000000000000000000000000";(A!=B)=sloj(A,B);(res);

}slj32(char A,char B)

{(A==B=='1')("2");else(A!=B)("1");else("0");

}sloj(AnsiString A,AnsiString B)

{res ="00000000000000000000000000000000" ;p='0';(int i=A.Length();i>=1;i--)

{(p=='0')

{(slj32(A[i],B[i])=="2")

{[i]='0';='1';

}(slj32(A[i],B[i])=="1")

{[i]='1';='0';

}[i]='0';

}

{(slj32(A[i],B[i])=="2")

{[i]='1';='1';

}(slj32(A[i],B[i])=="1")

{[i]='0';='1';

}

{[i]='1';='0';

}

}

}(res);

}sp(AnsiString S,int n)

{p;(int c=1;c<=n;c++)

{(int i=S.Length()-1;i>=1;i--)[i+1]=S[i];[1]='0';

}(S);

}sl(AnsiString S,int n)

{p;(int c=1;c<=n;c++)

{(int i=1;i<=S.Length()-1;i++)[i]=S[i+1];[S.Length()]='0';

}return (S);

}Dv(char c)

{AnsiString l="";k=c;(k<0)=k+256;(k>1)

{=IntToStr(k % 2)+l;=k/2;

}(k==0)="00000000";="1"+l;(l.Length()!=8)="0"+l;(l);

}Des(AnsiString k)

{c=0;(int i=1;i<=8;i++)=c+StrToInt(k[i])*pow(2,k.Length()-i);(c);

}__fastcall TForm1::Button1Click(TObject *Sender)

{(OpenDialog1->Execute())->Lines->LoadFromFile(OpenDialog1->FileName);

}

/////////////////////Кодирование//////////////////////////////////////////////

void __fastcall TForm1::Button8Click(TObject *Sender)

{=Memo1->Text;(int i =1;i<=s.Length();i++)

{=m+Dv(s[i]);

}M;l;(int i =1;i<=s.Length();i++)

{=M+Dv(s[i]);

}kol=M.Length()/64;ost;(M.Length()!=kol*64)

ost=(kol+1)*64-M.Length();=0;

if (ost>0)(int i=1;i<=ost;i++)=M+"1";v1,v0;(int i=0;i<=M.Length()/64;i+=2)

{sum="00000000000000000000000000000000";=M.SubString(32*i+1,32);=M.SubString(32*i+33,32);(int j=0;j<32;j++)

{=sloj(sum,Delta);p=sl(v1,4);//v1<<4=sloj(p,key);//(v1<<4) + k0p1=sloj(v1,sum);//v1+sum=xor(p,p1);//((v1<<4) + k0))^(v1+sum)p2=sp(v1,5);//v1>>5p3=sloj(p2,key);//v1>>5+k1p4=xor(p,p3);//all=sloj(v0,p4);//+==sl(v0,4);//v0<<4=sloj(p,key);//v0<<4+k2=sloj(v0,sum);//v0+sum=xor(p,p1);//(v0<<4+k2)^(v0+sum)=(sp(v0,5));//v0>>5;=sloj(p2,key);//v0>>5+k1;=xor(p,p3);// ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3)=sloj(v1,p4);//+=

}->Text=Memo2->Text+v0+v1;

}re=Memo2->Text;q="";->Clear();(int i=1;i<=re.Length();i+=8)

{="";(int j=i;j<=i+7;j++)=q+re[j];->Text=Memo2->Text+char(Des(q));

}

}__fastcall TForm1::Button10Click(TObject *Sender)

{(0xC6EF3720);

}


//////////Декодирование//////////////////////////////////////////

void __fastcall TForm1::Button2Click(TObject *Sender)

{=Memo1->Text;(int i =1;i<=s.Length();i++)

{=m+Dv(s[i]);

}M;l;(int i =1;i<=s.Length();i++)

{=M+Dv(s[i]);

}kol=M.Length()/64;ost;(M.Length()!=kol*64)

ost=(kol+1)*64-M.Length();=0;

if (ost>0)(int i=1;i<=ost;i++)=M+"1";v1,v0;(int i=0;i<=M.Length()/64;i+=2)

{sum="00000000000000000000000000000000";=M.SubString(32*i+1,32);=M.SubString(32*i+33,32);(int j=0;j<32;j++)

{=sloj(sum,Delta);p=sl(v1,4);//v1<<4=sloj(p,key);//(v1<<4) + k0p1=sloj(v1,sum);//v1+sum=xor(p,p1);//((v1<<4) + k0))^(v1+sum)p2=sp(v1,5);//v1>>5p3=sloj(p2,key);//v1>>5+k1p4=xor(p,p3);//all=sloj(v0,p4);//+==sl(v0,4);//v0<<4=sloj(p,key);//v0<<4+k2=sloj(v0,sum);//v0+sum=xor(p,p1);//(v0<<4+k2)^(v0+sum)=(sp(v0,5));//v0>>5;=sloj(p2,key);//v0>>5+k1;=xor(p,p3);// ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3)=sloj(v1,p4);//+=

}->Text=Memo2->Text+v0+v1;

}re=Memo2->Text;q="";->Clear();(int i=1;i<=re.Length();i+=8)

{="";(int j=i;j<=i+7;j++)=q+re[j];->Text=Memo1->Text+char(Des(q));

}

}

блочный шифр кодирование алгоритм

Результат работы программы


Кодирование







Декодирование


Вывод: в данной работе было произведено кодирование текста при помощи блочного алгоритма шифрования ТЕА.


МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ «ТИХООКЕАНСКИЙ ГОСУДАРСТВЕННЫЙ У

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ