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

Разработка программы кодирования текстового файла при помощи блочного алгоритма шифрования ТЕА типа "Сеть Фейштеля", который основан на битовых операциях с 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.