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


 

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

61022. Виготовлення проектованого виробу «Шкатулка» 124.5 KB
  Обладнання столярний верстак роботи виконані на попередніх уроках кухонні дошки ужиткові речі різці плакати креслярський інструмент ручний інструмент для обробки деревини ТВ6 та СТД120М.
61023. Оцінка продуктів харчування за їхнім хімічним складом. Ознайомлення з інструкціями з використання окремих хімічних препаратів, засобів побутової хімії тощо та оцінка їхньої небезпеки 146 KB
  Мета: навчити оцінювати продукти харчування з точки зору принципів раціонального харчування; навчити оцінювати добовий раціон харчування, визначити властивий тип харчування; формувати знання про ведення здорового способу життя....
61024. Історія вивчення клітини. Методи цитологічних досліджень 96 KB
  Перш ніж вивчити саму будову треба оволодіти методами цитологічних досліджень а також вивчити історію вивчення будови клітини. Актуалізація теоретичних знань Фронтальна бесіда: Які є рівні організації живої матерії...
61030. Как получается предложение 90 KB
  Умение сохранить учебную цель заданную учителем умение самостоятельно ставить новые учебные задачи определять наиболее эффективные способы достижения результата в соответствии с поставленной задачей и условиями...