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творив програму приховання повідомлення у графічному файлі за допомогою стеганографічних перетворень.


 

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

46786. Imperative sentences 30.5 KB
  Impertive sentences express commnds which convey the desire of the speker to mke someone generlly the listener perform n ction. Besides commnds proper impertive sentences my express prohibition request n invittion wrning persusion etc. Be quick Formlly commnds re mrked by the predicte verb in the impertive mood positive or negtive the reference to the second person lck of subject nd the use of the uxiliry do in negtive in emphtic sentences with the verb to be. Commnds re generlly chrcterized by the flling tone lthough the rising...
46789. Системное и смысловое строение сознания 30.5 KB
  Системное и смысловое строение сознания. Выготский определил область своего исследования как вершинную психологию психологию сознания. Согласно ему становление сознания является существенной линией развития человека. Под системным строением сознания Выготский понимал своеобразное отношение отдельных функций друг к другу то есть то что на каждой возрастной ступени определенные функции стоят в известном отношении друг к другу образуют определенную систему сознания.
46792. Общая характеристика подросткового возраста 30.5 KB
  Наиболее аффективные бурные реакции возникают при попытке коголибо из окружающих ущемить самолюбие подростка. Так как в этот период в личности подростка сосуществуют прямо противоположные потребности и черты. Внешний вид подростка еще один источник конфликта. У подростка появляется своя позиция.