20945

Створення програми приховання повідомлення у графічному файлі за допомогою стеганографічних перетворень

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

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

h include iostream include string using namespace std int mainint argc char argv[] { HANDLE hFile hFileMess hFileCont; BYTE pdbFileByte pdbMessByte; const BYTE dbKeySize = 8; BYTE dbKey[dbKeySize]={4160824202832}; BYTE dbKey[dbKeySize]={12730546}; BYTE dbKey[dbKeySize]={01234567}; DWORD dwMessSizedwFileSizedwRealFiledwRealMess; DWORD dwOffsetPictdwPictSize; hFile = CreateFileargv[1]GENERIC_READFILE_SHARE_READNULLOPEN_EXISTING0NULL; dwFileSize = GetFileSizehFileNULL; pdbFileByte = new...

Украинкский

2013-08-01

69.4 KB

2 чел.

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

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

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

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

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

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

 

                                                                                                Виконав:

                                                                                                      ст. гр КІТ 39

 Родін С.І

                                                                                                 Перевірив:

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

Харків 2012

Варіант №15

Ціль роботи

Створення програми приховання повідомлення у графічному файлі за допомогою стеганографічних перетворень.

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

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

 Програма приховання повідомлення у графічному файлі.

 Програма витягу скритого повідомлення з файлу.

Індивідуальне завдання:Метод квантування ображення

Програма приховання повідомлення.

#include "stdafx.h"

#include "SteganoMessage.h"

#include <iostream>

#include <string>

using namespace std

int main(int argc, char* argv[])

{

HANDLE hFile, hFileMess, hFileCont;

BYTE *pdbFileByte, *pdbMessByte;

 

 const BYTE dbKeySize = 8;

//BYTE dbKey[dbKeySize]={4,16,0,8,24,20,28,32};

BYTE dbKey[dbKeySize]={1,2,7,3,0,5,4,6};

//BYTE dbKey[dbKeySize]={0,1,2,3,4,5,6,7};

 DWORD dwMessSize,dwFileSize,dwRealFile,dwRealMess;

 DWORD *dwOffsetPict,*dwPictSize;

 hFile = CreateFile(argv[1],GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL);

dwFileSize = GetFileSize(hFile,NULL);

pdbFileByte = new BYTE[dwFileSize];

ReadFile(hFile,pdbFileByte,dwFileSize,&dwRealFile,NULL);

 

 dwOffsetPict =(DWORD*) &pdbFileByte[10];

 dwPictSize = (DWORD*) &pdbFileByte[34];

SteganoMessage sm;

 int  bBitsCount = 7;

do

{

 cout<<"Bits: ";

 cin>>bBitsCount;

 } while( bBitsCount > 8 );

sm.SetCode(bBitsCount);

sm.SetContainer(&pdbFileByte[*dwOffsetPict],*dwPictSize);  

sm.SetKey(dbKey,dbKeySize);

 

if(argc >= 3)

{

 hFileMess = CreateFile(argv[2],GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,0,NULL);

 

 char cFileContName[256];

 strcpy(cFileContName,argv[1]);

 sprintf(&cFileContName[strlen(argv[1])-4],"_bits%d.bmp\0",bBitsCount);

 hFileCont = CreateFile(cFileContName,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL);

 BYTE dbFileNameLength = strlen(argv[2]);  

 for(int i = dbFileNameLength; (i>0) && (argv[2][i]!=0x5C);i--);  

 i++;

 dbFileNameLength-=(i-1);

 DWORD dwMessFileSize = GetFileSize(hFileMess,NULL);

 dwMessSize = dwMessFileSize + 4 + dbFileNameLength;

 pdbMessByte = new BYTE[dwMessSize];  

 DWORD dwTempSize = dwMessSize - 4;

 strcpy((char*)&pdbMessByte[4],&argv[2][i]);

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

 {

  pdbMessByte[i] = (BYTE) dwTempSize;

  dwTempSize >>= 8;

 }    

 ReadFile(hFileMess,&pdbMessByte[4+dbFileNameLength],dwMessFileSize,&dwRealMess,NULL);  

 sm.SetMessage(pdbMessByte,dwMessSize);

 if(sm.CheckSize())

 {

  cout<<"Start coding"<<endl;

  sm.Encipher();  

 }

 else

 {

  cout<<"Message is too large"<<endl;

  cin.get();

 }

 

 WriteFile(hFileCont,pdbFileByte,dwFileSize,&dwRealFile,NULL);

 CloseHandle(hFileCont);

}

else

{  

 sm.Decode(&pdbMessByte,&dwMessSize);  

 for(int i = 0;(i<dwMessSize) && (pdbMessByte[i]!=0x00);i++);

 i++;

 hFileMess = CreateFile((char*)pdbMessByte,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,0,NULL);

 WriteFile(hFileMess,&pdbMessByte[i],dwMessSize-i,&dwRealMess,NULL);  

}

CloseHandle(hFile);

CloseHandle(hFileMess);  

delete pdbMessByte;

delete pdbFileByte;

return 0;

}

//c:\test.bmp c:\text.txt

//c:\res.bmp

Програма витягу скритого повідомлення з файлу

#include "stdafx.h"

#include "Stegano.h"

#include <iostream>

using namespace std;

//////////////////////////////////////////////////////////////////////

// Construction/Destruction

//////////////////////////////////////////////////////////////////////

Stegano::Stegano()

{

m_pdbBits = NULL;

}

Stegano::~Stegano()

{

if (m_pdbBits)

 delete m_pdbBits;

}

void Stegano::SetCode(BYTE dbBit)

{

m_dbBit = dbBit;

m_dbSize = 8/dbBit;

if(8 % dbBit)

 m_dbSize++;

m_pdbBits = new BYTE[m_dbSize];

m_dbMask = (0xFF>>m_dbBit)<<m_dbBit;

}

void Stegano::Coding(BYTE dbByte2Code)

{   

for(BYTE i = 0,j=0; i<8;i+=m_dbBit,j++)

{

 m_pdbBits[j] = dbByte2Code;

 m_pdbBits[j] <<= (8 - m_dbBit);

 m_pdbBits[j] >>= (8 - m_dbBit);

 dbByte2Code >>= m_dbBit;   

}

}

bool Stegano::Decoding(BYTE dbByte2Decode, BYTE* dbMess)

{

 

static BYTE i = 0;

BYTE dbShift = m_dbBit;

if(m_dbBit>(8-i))

 dbShift = 8-i;

dbByte2Decode <<= (8 - dbShift);

*dbMess >>= dbShift;

*dbMess+=dbByte2Decode;

i+=dbShift;

if(i==8)

{

 i = 0;

 return true;

}

return false;

}

BYTE Stegano::GetBitsSize()

{

return m_dbSize;

}

BYTE Stegano::GetMask()

{

return m_dbMask;

}

Рисунок 2 – витяг с файлу

Алгоритм

Рисунок 3 – Блок схема

Висновки: cтворив програму приховання повідомлення у графічному файлі за допомогою стеганографічних перетворень.


 

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

25691. Устойчивость работы электропривода 281 KB
  Устойчивое, неустойчивое и безразличное состояния электродвигателей. Статическая устойчивость электропривода Совмещенные механические характеристики электродвигателя и механизмов. Влияние эксплуатационных характеристик электродвигателяышечные клетки. Клетки узла проводящей системы. Формирование импульса происходит в синусном узле центральную часть которого занимают клетки первого типа водители ритма или пейсмекерные клетки Рклетки способные к самопроизвольным сокращениям.
25692. Прямая кишка 31 KB
  В тазовой части прямой кишки ее слизистая оболочка имеет три поперечные складки. В анальной части кишки различают три зоны: столбчатую промежуточную и кожную. Слизистая оболочка прямой кишки состоит из эпителия собственной и мышечной пластинок.
25693. Сердце 42.5 KB
  Стенка сердца состоит из трех оболочек: внутренней эндокарда средней миокарда и наружной эпикарда. Первая закладка сердца появляется в начале 3й недели развития у эмбриона длиной 15 мм в виде парного скопления мезенхимных клеток которые расположены в задней части головного отдела зародышевого щитка по сторонам от средней линии под висцеральным листком мезодермы. К 4му месяцу заканчивается образование всех отделов проводящей системы сердца. Клапаны сердца: предсердножелудочковые и желудочковососудистые развиваются в основном...
25694. Развитие нервной ткани 35.5 KB
  Часть клеток нервной пластинки не входит в состав нервной трубки и эпидермальной эктодермы и образует скопления по бокам от нервной трубки которые сливаются в рыхлый тяж располагающийся между нервной трубкой и эпидермальной эктодермой нервный гребень ганглиозная пластинка. Нервная трубка на ранних стадиях эмбриогенеза представляет собой многорядный нейроэпителий состоящий из вентрикулярных или нейроэпителиальных клеток. Вентрикулярная эпендимная зона состоит из делящихся клеток цилиндрической формы. Клетки делятся и после деления...
25695. НЕРВНАЯ СИСТЕМА. Развитие. Нервы. Узлы. Оболочки 34 KB
  Оболочки. Клетки этой оболочки отличаются овальной формой ядер. На поперечном срезе нерва видны сечения осевых цилиндров нервных волокон и одевающие их глиальные оболочки. Соединительнотканные оболочки нерва содержат кровеносные и лимфатические сосуды и нервные окончания.
25696. Взаимодействия клеток в иммунном ответе 53.5 KB
  Узнавание рецептором Тхклетки комплекса АГ молекула МНС II класса на поверхности Влимфоцита приводит к секреции Тхклеткой интерлейкинов ИЛ2 ИЛ4 ИЛ5 ИЛ6 гаммаИФН гаммаинтерферона под действием которых Вклетка размножается и дифференцируется с образованием плазматических клеток и Вклеток памяти. Так ИЛ4 инициирует активацию Вклетки ИЛ5 стимулирует пролиферацию активированных Вклеток ИЛ6 вызывает созревание активированных Вклеток и превращение их в плазматические клетки секретирующие антитела. Они регулируют...
25698. Селезенка 49 KB
  На 12й неделе развития селезенки впервые появляются Влимфоциты с иммуноглобулиновыми рецепторами. Толщина капсулы неодинакова в различных участках селезенки. Наиболее толстая капсула в воротах селезенки через которые проходят кровеносные и лимфатические сосуды. Внутрь от капсулы отходят перекладины трабекулы селезенки которые в глубоких частях органа анастомозируют между собой.
25699. Семявыносящие пути 43 KB
  Этот проток многократно извиваясь формирует тело придатка и в нижней хвостовой части его переходит в прямой семявыносящий проток поднимающийся к выходу из мошонки а затем достигающий предстательной железы где впадает в мочеиспускательный канал. Добавочные железы мужской половой системы: семенные пузырьки предстательная железа бульбоуретральные железы. В первой половине пренатального эмбриогенеза человека из разрастающихся эпителиальных тяжей развиваются преимущественно альвеолярнотрубчатые простатические железы а со второй половины...