Шифрование данных. Алгоритм Blowfish

Автор работы: Пользователь скрыл имя, 20 Апреля 2015 в 19:20, курсовая работа

Описание работы

Предмет исследования – криптографический алгоритм Blowfish. Цель работы – разработка программного продукта обеспечивающего шифрование/расшифрование данных по алгоритму Blowfish. Алгоритм Blowfish — блочный шифр, основанный на сети Файстеля. Алгоритм прост в реализации, он является стойким ко всем, известным на сегодняшний день, методам криптоанализа.

Содержание работы

Введение 4
1 Понятие шифрования данных 7
2 Описание алгоритма blowfish 11
2.1 Структура алгоритма 11
2.2 Процедура расширения ключа 13
2.3 Достоинства и недостатки алгоритма 14
3 Практическая реализация алгоритма blowfish 16
4 Описани работы с программным продуктом 21
4.1 Минимальные требования для работы программного продукта 21
4.2 Шифрование данных 21
4.3 Расшифрование данных 23
4.4 Генерация пароля 25
Заключение 26
Список использованных источников 27
Приложение 1. Содержимое заголовочного файла 28
Приложение 2. Содержимое основного файла 29

Файлы: 1 файл

Курсовая работа.docx

— 690.11 Кб (Скачать файл)

     0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d,

     0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84,

     0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048,

     0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8,

     0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd,

     0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9,

     0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7,

     0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38,

     0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f,

     0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c,

     0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525,

     0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1,

     0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442,

     0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964,

     0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e,

     0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8,

     0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d,

     0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f,

     0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299,

     0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02,

     0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc,

     0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614,

     0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a,

     0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6,

     0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b,

     0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0,

     0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060,

     0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e,

     0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9,

     0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f,

     0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6};

 

 unsigned int keys[] = {

     0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344,

     0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89,

     0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c,

     0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917,

     0x9216d5d9, 0x8979fb1b};

 

unsigned long long TBlowfish::Encrypt(unsigned long long block){

unsigned int block_p=0,block_l=0,temp=0;

block_p=block & mask;

block_l=(block >> 32) & mask;

for (int i=0;i<16;i++){

block_l=block_l^key[i];

block_p=block_p^F(block_l);

if (i != 15){

temp=block_p;

block_p=block_l;

block_l=temp;

}

}

block_l=block_l^key[17];

block_p=block_p^key[16];

unsigned long long result=block_l;

result=(result << 32) | block_p;

return result;

}

unsigned long long TBlowfish::Decrypt(unsigned long long block){

unsigned int block_p=0,block_l=0,temp=0;

block_p=block & mask;

block_l=(block >> 32) & mask;

for (int i=17;i>1;i--){

block_l=block_l^key[i];

block_p=block_p^F(block_l);

temp=block_p;

block_p=block_l;

block_l=temp;

}

block_p=block_p^key[0];

block_l=block_l^key[1];

temp=block_p;

block_p=block_l;

block_l=temp;

unsigned long long result=block_l;

result=(result << 32) | block_p;

return result;

}

unsigned int TBlowfish::F(unsigned int sub_block){

short x1=0,x2=0,x3=0,x4=0;

x1=sub_block & 0xFF; x2=(sub_block >> 8) & 0xFF;

x3=(sub_block >> 16) & 0xFF; x4=(sub_block >> 24) & 0xFF;

unsigned int y1=0,y2=0,y3=0,y4=0,temp=0;

y1=S1[x1];

y2=S2[x2];

y3=S3[x3];

y4=S4[x4];

temp=(y1+y2)% mask;

temp^=y3;

temp=(temp+y4) % mask;

return temp;

}

void TBlowfish::final(unsigned int* mass, int len){

unsigned long long bl=0x0;

for (int i=0; i<len;i+=2){ 

bl=Encrypt(bl);

mass[i]=bl & mask;

mass[i+1]=(bl >> 32) & mask;

}

}

void TBlowfish::initialization(unsigned int* kluch){

int j=0;

for (int i=0;i<18;i++){

if (j>=8) j%=8;

key[i]=key[i]^kluch[j];

}

final(key,18);

final(S1,256);

final(S2,256);

final(S3,256);

final(S4,256);

}

TBlowfish::TBlowfish(){

copy(K1, K1+256, S1);

copy(K2, K2+256, S2);

copy(K3, K3+256, S3);

copy(K4, K4+256, S4);

copy(keys, keys+18, key);

}

TBlowfish::~TBlowfish(){}

 

 


Информация о работе Шифрование данных. Алгоритм Blowfish