Блочный шифр ТЕА
МИНИСТЕРСТВО
ОБРАЗОВАНИЯ И НАУКИ
ГОСУДАРСТВЕННОЕ
ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО
ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
«ТИХООКЕАНСКИЙ
ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ»
Лабораторная
работа №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));
}
}
блочный шифр кодирование алгоритм
Результат работы программы
Кодирование
Декодирование
Вывод:
в данной работе было произведено кодирование текста при помощи блочного
алгоритма шифрования ТЕА.