20942

Шифрування та дешифрування даних за допомогою блокових алгоритмів

Лабораторная работа

Информатика, кибернетика и программирование

Програма дешифрування інформації (повернення початкового вигляду файла) а також оцінити правильність процедури шифрування – дешифрування (відсутність зміни результату відносно початкового файлу).

Украинкский

2017-03-13

321.24 KB

8 чел.

Міністерство освіти, науки, молоді та спорту України

Національний технічний Університет “ХПІ”

“ХАРКІВСКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ”

Кафедра “ Обчислювальна техніка та програмування ”

Лабораторна робота №5

по курсу “Захист інформації у комп’ютерних системах та мережах”

 

                                                                                                Виконав:

                                                                                                      ст. гр КІТ 39

 Родін С.І

                                                                                                 Перевірив:

Межерицький С.Г

Харків 2012

Варіант №15

Тема: “Шифрування та дешифрування даних за допомогою

блокових алгоритмів”

Мета роботи:  Створення програм для шифрування та дешифрування інформації за допомогою шифрів підстановки.

Постановка задачі

Необхідно розробити і налагодити дві програми:

 Програма шифрування інформації з використанням визначених алгоритмів.

 У якості інформації використовувати копію файлу з розробленою програмою.

 програма дешифрування інформації (повернення початкового вигляду файла) а також оцінити правильність процедури “шифрування – дешифрування” (відсутність зміни результату відносно початкового файлу).

Завдання:

Алгоритм Blowfish

Вхідний файл:

До стиснення

Текст програми:

#include "blowfish.h"

#include "blowfish2.h" // holds the random digit tables

#define S(x,i) (SBoxes[i][x.w.byte##i])

#define bf_F(x) (((S(x,0) + S(x,1)) ^ S(x,2)) + S(x,3))

#define ROUND(a,b,n) (a.dword ^= bf_F(b) ^ PArray[n])

CBlowFish::CBlowFish (){

 PArray = new DWORD [18] ;

 SBoxes = new DWORD [4][256] ;}

CBlowFish::~CBlowFish (){

 delete PArray ;

 delete [] SBoxes ;}

 // the low level (private) encryption function

void CBlowFish::Blowfish_encipher (DWORD *xl, DWORD *xr){

 union aword  Xl, Xr ;

Xl.dword = *xl ;

Xr.dword = *xr ;

Xl.dword ^= PArray [0];

ROUND (Xr, Xl, 1) ;  ROUND (Xl, Xr, 2) ;

ROUND (Xr, Xl, 3) ;  ROUND (Xl, Xr, 4) ;

ROUND (Xr, Xl, 5) ;  ROUND (Xl, Xr, 6) ;

ROUND (Xr, Xl, 7) ;  ROUND (Xl, Xr, 8) ;

ROUND (Xr, Xl, 9) ;  ROUND (Xl, Xr, 10) ;

ROUND (Xr, Xl, 11) ; ROUND (Xl, Xr, 12) ;

ROUND (Xr, Xl, 13) ; ROUND (Xl, Xr, 14) ;

ROUND (Xr, Xl, 15) ; ROUND (Xl, Xr, 16) ;

Xr.dword ^= PArray [17] ;

*xr = Xl.dword ;

*xl = Xr.dword ;}

 // the low level (private) decryption function

void CBlowFish::Blowfish_decipher (DWORD *xl, DWORD *xr){

  union aword  Xl ;

  union aword  Xr ;

  Xl.dword = *xl ;

  Xr.dword = *xr ;

  Xl.dword ^= PArray [17] ;

  ROUND (Xr, Xl, 16) ;  ROUND (Xl, Xr, 15) ;

  ROUND (Xr, Xl, 14) ;  ROUND (Xl, Xr, 13) ;

  ROUND (Xr, Xl, 12) ;  ROUND (Xl, Xr, 11) ;

  ROUND (Xr, Xl, 10) ;  ROUND (Xl, Xr, 9) ;

  ROUND (Xr, Xl, 8) ;   ROUND (Xl, Xr, 7) ;

  ROUND (Xr, Xl, 6) ;   ROUND (Xl, Xr, 5) ;

  ROUND (Xr, Xl, 4) ;   ROUND (Xl, Xr, 3) ;

  ROUND (Xr, Xl, 2) ;   ROUND (Xl, Xr, 1) ;

  Xr.dword ^= PArray[0];

  *xl = Xr.dword;

  *xr = Xl.dword;}

 // constructs the enctryption sieve

void CBlowFish::Initialize (BYTE key[], int keybytes){

 int    i, j ;

DWORD    data, datal, datar ;

 union aword temp ;

 // first fill arrays from data tables

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

 PArray [i] = bf_P [i] ;

 for (i = 0 ; i < 4 ; i++){

  for (j = 0 ; j < 256 ; j++)

   SBoxes [i][j] = bf_S [i][j] ;}

j = 0 ;

 for (i = 0 ; i < NPASS + 2 ; ++i){

 temp.dword = 0 ;

 temp.w.byte0 = key[j];

 temp.w.byte1 = key[(j+1) % keybytes] ;

 temp.w.byte2 = key[(j+2) % keybytes] ;

 temp.w.byte3 = key[(j+3) % keybytes] ;

 data = temp.dword ;

 PArray [i] ^= data ;

 j = (j + 4) % keybytes ;}

datal = 0 ;

datar = 0 ;

 for (i = 0 ; i < NPASS + 2 ; i += 2){

 Blowfish_encipher (&datal, &datar) ;

 PArray [i] = datal ;

 PArray [i + 1] = datar ;}

 for (i = 0 ; i < 4 ; ++i){

 for (j = 0 ; j < 256 ; j += 2){

   Blowfish_encipher (&datal, &datar) ;

   SBoxes [i][j] = datal ;

   SBoxes [i][j + 1] = datar ;}}}

 // get output length, which must be even MOD 8

DWORD CBlowFish::GetOutputLength (DWORD lInputLong){

DWORD  lVal ;

lVal = lInputLong % 8 ; // find out if uneven number of bytes atthe end

 if (lVal != 0)

 return lInputLong + 8 - lVal ;

 else

 return lInputLong ;}

 // Encode pIntput into pOutput.  Input length in lSize.  Returned value

 // is length of output which will be even MOD 8 bytes.  Inputbuffer and

 // output buffer can be the same, but be sure buffer length is even MOD8.

DWORD CBlowFish::Encode (BYTE * pInput, BYTE * pOutput, DWORD lSize){

DWORD  lCount, lOutSize, lGoodBytes ;

BYTE *pi, *po ;

 int  i, j ;

 int  SameDest = (pInput == pOutput ? 1 : 0) ;

lOutSize = GetOutputLength (lSize) ;

 for (lCount = 0 ; lCount < lOutSize ; lCount += 8{

 if (SameDest) // if encoded data is being written into inputbuffer{

   if (lCount < lSize - 7) // if not dealing with unevenbytes at end{

     Blowfish_encipher ((DWORD *) pInput,

      (DWORD *) (pInput + 4)) ;}

   else  // pad end of data with null bytes tocomplete encryption{

   po = pInput + lSize ; // point at bytepast theend of actual data

   j = (int) (lOutSize - lSize) ; // number ofbytes to set to null

   for (i = 0 ; i < j ; i++)

    *po++ = 0 ;

     Blowfish_encipher ((DWORD *) pInput,

      (DWORD *) (pInput + 4)) ;}

   pInput += 8 ;}

 else    // output buffer not equal to inputbuffer, so must cop{               // input to output buffer prior to encrypting

   if (lCount < lSize - 7) // if not dealing with unevenbytes at end{

    pi = pInput ;

    po = pOutput ;

    for (i = 0 ; i < 8 ; i++)

// copy bytes to output

     *po++ = *pi++ ;

     Blowfish_encipher ((DWORD *) pOutput, // nowencrypt them

      (DWORD *) (pOutput + 4)) ;}

   else  // pad end of data with null bytes tocomplete encryptio{

    lGoodBytes = lSize - lCount ; // number ofremaining data bytes

    po = pOutput ;

    for (i = 0 ; i < (int) lGoodBytes ; i++)

     *po++ = *pInput++ ;

    for (j = i ; j < 8 ; j++)

     *po++ = 0 ;

     Blowfish_encipher ((DWORD *) pOutput,

      (DWORD *) (pOutput + 4)) ;}

   pInput += 8 ;

   pOutput += 8 ;}}

 return lOutSize  }

 // Decode pIntput into pOutput.  Input length in lSize.  Inputbuffer and

 // output buffer can be the same, but be sure buffer length is even MOD8.

void CBlowFish::Decode (BYTE * pInput, BYTE * pOutput, DWORD lSize){

DWORD  lCount ;

BYTE *pi, *po ;

 int  i ;

 int  SameDest = (pInput == pOutput ? 1 : 0) ;

 for (lCount = 0 ; lCount < lSize ; lCount += 8){

 if (SameDest) // if encoded data is being written into inputbuffer{

    Blowfish_decipher ((DWORD *) pInput,

     (DWORD *) (pInput + 4)) ;

   pInput += 8 ;}

 else    // output buffer not equal to inputbuffer{               // so copy input to output before decoding

   pi = pInput ;

   po = pOutput ;

   for (i = 0 ; i < 8 ; i++)

    *po++ = *pi++ ;

    Blowfish_decipher ((DWORD *) pOutput,

     (DWORD *) (pOutput + 4)) ;

   pInput += 8 ;

   pOutput += 8 ;}}}

Після стиснення

Алгоритм

Отриманий результат:

Рисунок 1- Результат роботи програми

Висновки: за час виконання лабораторної роботи створив программу для шифрування та дешифрування інформації за допомогою шифрів підстановки


 

А также другие работы, которые могут Вас заинтересовать

43726. Применение среды программирования LabVIEW для создания виртуального лабораторного практикума 2.39 MB
  Применение среды программирования LbVIEW для создания виртуального лабораторного практикума Обзор литературы по LbVIEW Обзор среды графического программирования LbVIEW LbVIEW как интегрированная среда разработки Виртуальные приборы Передняя панель Блок диаграмма Терминал Узел Провод Порядок выполнения виртуального прибора Типы данных Примером может служить система LbVIEW фирмы Ntionl Instruments. Так например приложения создаваемые в системе LbVIEW занимают примерно 253 Мбайт...
43728. Институт расторжения брака 85.81 KB
  Основание и порядок расторжения брака Глава Расторжение брака в органах записи актов гражданского состояния При взаимном согласии на расторжение брака супругов не имеющих общих несовершеннолетних детей
43729. АНАЛИЗ ИНВЕСТИЦИОННОЙ ДЕЯТЕЛЬНОСТИ ПРЕДПРИЯТИЯ ООО ЛЕСКОМ 947.5 KB
  Инвестиции играют весьма важную роль в экономике. Они объективно необходимы для стабильного развития экономики, обеспечения устойчивого экономического роста. Активный инвестиционный процесс предопределяет экономический потенциал страны в целом, способствует повышению жизненного уровня населения.
43730. БЕЗОПАСНОСТЬ В ЧРЕЗВЫЧАЙНЫХ СИТУАЦИЯХ 807.08 KB
  Список сокращений: ДП дипломный проект ХОО химически опасный объект ОХД объект хозяйственной деятельности ОХВ опасное химическое вещество РГР расчётнографическая работа КИП контрольноизмерительные приборы ППР плановопредупредительные работы Общие положения В соответствии с п. Необходимо дать определения что такое ОХВ где они используются.6; dплотность ОХВ т м 3 таблица 9[17] d= 0. Мероприятия по защите рабочих и служащих ОХД указать: Выводы: Объект оказался не оказался в зоне химического...
43731. Экономические отношения в рамках международных организаций 291 KB
  На современном этапе развития эта работа является первой по тематике международно-правовых аспектов экономических отношений России и Китая. Таким образом, научную разработанность данной темы нельзя признать достаточной – она требует глубокого анализа
43732. Экономический анализ проведенных проектных работ и их внедрение в условиях предприятия ООО «Агрохмель» 12.55 MB
  Климат хозяйства характеризуется умеренно-прохладным. Солнечных дней в году около 110. Среднегодовая температура воздуха положительная и равна +2,2 градуса Среднегодовое количество осадков 427 мм, а во время вегетационного периода 300-390мм. Почвы в среднем промерзают на 63 см.
43733. Оптимізація виробництва деталі маточина переднього колеса 399.47 KB
  Опис призначення й умов роботи деталі. Хімічний склад механічні властивості матеріалу деталі. Аналіз технологічності деталі. Проектування маршрутного технологічного процесу виготовлення деталі.