20942

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

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

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

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

Украинкский

2017-03-13

321.24 KB

7 чел.

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

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

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

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

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

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


 

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

21126. Конструирование. Основные понятия и определения 115 KB
  Основные понятия и определения Конструирование является составной частью процесса разработки СВТ и представляет собой комплекс взаимосвязанных работ при выполнении которых необходимы учет разносторонних требований к конструкции устройства знание технологии. Каждое поколение СВТ имело новый тип элементной базы что изменяло правила и положения теории и практики конструирования. Но характерным всегда являлось и является разбиение конструкции и общей схемы СВТ на отдельные часто повторяющиеся устройства оформляемые в виде элементов...
21127. Сутність і соціальна природа релігії 55.5 KB
  Богослови майже усіх релігійних конфесій запевняють своїх віруючих, що їх релігія є віровчення, яке дано людям богом. Так, згідно з уявленням буддистів, буддизм був даний богами людям через Будду, людину, яка досягла вищої святості. Один з Будд, якого прозвали в його земному житті Шакьямуні
21128. Поверхностно-монтируемые компоненты (SMC или SMD) 90 KB
  Выводные компоненты IMC или THT Эта хорошо знакомая отечественным технологам группа компонентов включает традиционные пассивные компоненты с осевыми аксиальными выводами пассивные и активные компоненты с радиальными выводами а также интегральные схемы в DIP СИП и других менее распространенных корпусах. Нестандартные компоненты OFC К этой группе компонентов выделившейся относительно недавно мы относим выводные компоненты не вошедшие в IMC. Это самая пестрая группа компонентов включающая в себя соединители разъемы трансформаторы...
21129. Воздействия электрического характера 48 KB
  При реализации устройства возникают паразитные связи помехи. Паразитные связи являются следствием неидеальности реализации электрической схемы поэтому значения наводок определяются конструкцией изделия табл. Классификация паразитных связей в каналах передачи информации Причины помех Источники помех внутренние внешние Включение напряжения помехи в канале связи последовательное последовательное последовательное и параллельное Физические причины паразитной связи Неидеальность элементов в канале связи Неидеальность токопроводящих цепей...
21130. ПОНЯТИЕ О ПРОИЗВОДСТВЕННОМ И ТЕХНОЛОГИЧЕСКОМ ПРОЦЕССАХ 46.5 KB
  Изделием называется любой предмет или набор предметов производства подлежащих изготовлению на предприятии. Производство классифицируется тремя категориями: 1 Типы 2 Виды 3 Части Типы производства классификационная категория производства выделяемая по признакам широты номенклатуры регулярности стабильности и объема выпуска изделий. Тип производства важнейшая характеристика от которой зависит объем подготовки производства для выпуска изделия.
21131. Единая Система Технологической Документации (ЕСТД) 47.5 KB
  Назначение комплекса документов ЕСТД: установление единых унифицированных машинноориентированных форм документов обеспечивающих совместимость информации независимо от применяемых методов проектирования документов без применения средств механизации с применением средств механизации или автоматизации; создание единой информационной базы для внедрения средств механизации и автоматизации применяемых при проектировании технологических документов и решении инженернотехнических задач; установление единых требований и правил по оформлению...
21132. ЭТАПЫ РАЗРАБОТКИ ЭВМ И СИСТЕМ 694 KB
  Конструкция современной ЭВМ комплекс различных по природе деталей определенным образом объединенных электрически и механически друг с другом и призванных выполнять заданные функции в заданных условиях и режимах эксплуатации. Широкое внедрение вычислительной техники во все сферы человеческой деятельности предопределяет необходимость разработки таких ЭВМ которые бы имели широкие возможности применения малую стоимость небольшую длительность этапа разработки и внедрения ее в производство максимальную технологичность и т....
21133. ОБЕСПЕЧЕНИЕ ЗАЩИТЫ ЭВА ОТ ВНЕШНИХ И ПАРАЗИТНЫХ ВОЗДЕЙСТВИЙ 2.78 MB
  Понятие жесткости и механической прочности конструкции При разработке конструкции ЭВМ необходимо обеспечить требуемую жесткость и механическую прочность ее элементов. Герметизация отдельных элементов узлов устройств или всей машины При этом способе защиты в зависимости от степени чувствительности тех или иных элементов или узлов к воздействию агрессивной среды и от их конструктивных особенностей применяют различные способы герметизации отличающиеся как методом исполнения так и сложностью и стоимостью. Вакуумноплотная герметизация может...
21134. ОСНОВНЫЕ ЭТАПЫ ПРОИЗВОДСТВА ПЕЧАТНЫХ ПЛАТ 2.37 MB
  1 Изготовление фотошаблонов печатной платы Изготовление печатной платы начинается с изготовления фотошаблон рисунка.2 Получение заготовок печатной платы К заготовительным технологическим операциям изготовления ПП относят следующие операции: раскрой материала; получение заготовок ПП; получение базовых и технологических отверстий.4 Подготовка поверхности печатной платы Эта технологическая операция осуществляется со следующими целями: удаления заусенцев частиц смолы механической пыли и частиц из отверстий после сверления; получение...