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- Результат роботи програми

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


 

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

66477. Рынок ценных бумаг и фондовые биржи 163 KB
  Невозможно представить себе развитую страну без рынка ценных бумаг. Ведь рынок ценных бумаг это тот институт на котором отражается вся экономика страны будь то промышленный сектор сектор обслуживания или финансовый сектор.
66478. Валютный контроль за поступлением в Российскую Федерацию валютной выручки от экспорта товаров 274.5 KB
  Государственное регулирование внешнеэкономической деятельности Российской Федерации включая область валютно-кредитных отношений призвано обеспечить экономическую безопасность страны содействовать более быстрому росту ее экономики за счет расширения внешнеэкономических...
66479. МЕТАБОЛИЧЕСКИЕ СДВИГИ В ОРГАНИЗМЕ, ПРОИСХОДЯЩИЕ ВСЛЕДСТВИЕ ВОЗНИКНО ВЕНИЯ САХАРНОГО ДИАБЕТА 217.5 KB
  Из различных паталогических состояний связанных с нарушениями эндокринной функции поджелудочной железы сахарный диабет характеризующийся абсолютной или относительной недостаточностью инсулина по частоте намного опережает все остальные и служит главным предметом настоящей...
66480. Первоначальные навыки хорового пения у детей младшего школьного возраста на уроках музыки. Методика работы 175.5 KB
  Цель работы: Состоит в исследовании особенностей подготовки младших школьников к хоровой деятельности, в выявлении комплекса методов, активизирующих процесс усвоения вокально-хоровых навыков. Изучение научной и методической литературы, анализ личной практической работы с хором позволили...
66481. Формирование орфографических навыков у младших школьников 424 KB
  Все написания которые устанавливаются правилами указаниями и запрещениями в системе орфографии имеют обоснование чаще всего связанное с морфемным составом слова с его грамматической принадлежностью и формой. Правила орфографии определяют выбор написаний в следующих пяти...
66482. Экономический анализ эффективности использования трудовых ресурсов в ФГБУ «Средневолжрыбвод» 5.79 MB
  Расчет заработной платы и учет расчетов с персоналом по оплате труда в учреждении является одним из самых трудоемких, объемных и ответственных участков работы. Сложность проведения подсчетов заключается в их персонифицированном характере - заработок считается для каждого сотрудника...
66483. Проект ЯЭУ ледокола с эффективной мощностью (мощность на винтах) 40МВт 4.19 MB
  Произведен расчет тепловой схемы установки оборудования I контура. Произведен тепловой гидравлический и прочностной расчеты ПГ расчет ГЦН I контура. Техническое освидетельствование один раз в год; оборудование реакторной установки должно охлаждаться водой третьего контура с температурой не выше 40оС...
66485. Мероприятия по снижению затрат в области энергоснабжения здания конторы ООО «Агрофирмы Тукса» 1.78 MB
  Граница балансовой принадлежности тепловых сетей по первому фланцу до запорной арматуры со стороны тепловой сети на элеваторном узле. Расчётные расходы теплоносителя вода 9060 определяются на основании проекта путём деления тепловой нагрузки...