• 大小: 2KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-07
  • 语言: C/C++
  • 标签: 信息隐藏  BMP  LSB  

资源简介

基于LSB的BMP文件信息隐藏,C++实现。 Win32控制台应用程序。

资源截图

代码片段和文件信息

/*********************************************
*  功能:基于LSB的BMP文件信息隐藏
*  作者:aikesiluoente
*  构建日期: 2010/6/10
*  本程序参考自:“foxtail-处理bmp图象-2008/3/4”
   在此表示感谢
*********************************************/
#include “Bmp24.h“
#include 
#include 
#include 

Bmp24::Bmp24(void)
{
_pbmfh = new tagBITMAPFILEHEADER;
_pbmih = new tagBITMAPINFOHEADER;
_pbmd = NULL;
_size = 0;
}

Bmp24::~Bmp24(void)
{
delete _pbmfh;
delete _pbmih;
if (_pbmd)
{
delete _pbmd;
}
}

//载入BMP文件
void Bmp24::LoadFile(const char *filename)
{
ifstream InFile;
InFile.open(filename ios::in | ios::binary);

InFile.read((char*)_pbmfh sizeof(tagBITMAPFILEHEADER));
cout << “+-----------+“ << endl
 << “Read bmfh OK!“ << endl;
InFile.read((char*)_pbmih sizeof(tagBITMAPINFOHEADER));
cout << “Read bmih OK!“ << endl;

//直接定位BMP数据区,跳过调色板
_size = _pbmfh->bfSize - _pbmfh->bfOffBits;
_pbmd = new BYTE[_size];
InFile.read((char*)_pbmd _size);
cout << “Read bmd  OK!“ << endl;
InFile.close();
cout << “Load file OK!“ << endl
 << “+-----------+“ << endl;
}

//保存BMP文件
void Bmp24::SaveFile(const char *filename)
{
ofstream OutFile;
OutFile.open(filename ios::out | ios::binary);

OutFile.write((char*)_pbmfh sizeof(tagBITMAPFILEHEADER));
cout << “+============+“ << endl
 << “Write bmfh OK!“ << endl;
OutFile.write((char*)_pbmih sizeof(tagBITMAPINFOHEADER));
cout << “Write bmih OK!“ << endl;
OutFile.write((char*)_pbmd _size);
cout << “Write bmd  OK!“ << endl;
OutFile.close();
cout << “Save  file OK!“ << endl
 << “+============+“ << endl;
}

//嵌入文本文件
void Bmp24::embedTxt(const char *filename)
{
ifstream TxtFile;
TxtFile.open(filename ios::in | ios::binary);
TxtFile.seekg(0 TxtFile.end);
DWORD TxtFileLength = TxtFile.tellg();
if (_size < TxtFileLength * 8)
{
return ;
}

cout << “M  file length: “ << TxtFileLength << endl;
BYTE *pTxtFile = new BYTE[TxtFileLength];
TxtFile.seekg(0 TxtFile.beg);
TxtFile.read((char*)pTxtFile TxtFileLength);
TxtFile.close();

for (int i = 0 k = 0; i < TxtFileLength; ++i)
{
for (int j = 0; j < 8; ++j)
{
if ((pTxtFile[i] >> j & 0x01) == 0)
_pbmd[k+32] &= 0xfe;
else
_pbmd[k+32] |= 0x01;
++k;
}
}

for (int i = 0; i < 32; ++i)
{
if ((TxtFileLength >> i & 0x00000001) == 0)
_pbmd[i] &= 0xfe;
else
_pbmd[i] |= 0x01;
}
delete pTxtFile;
cout << “embedding file OK!“ << endl;
}

//提取文本文件
void Bmp24::ExtractTxt(const char *filename)
{
DWORD TxtFileLength = 0x00000000;
for (int i = 0; i < 32; ++i)
{
if ((_pbmd[i] & 0x01) == 0)
TxtFileLength &= 0x7fffffff;
else
TxtFileLength |= 0x80000000;

if (i < 31)
TxtFileLength >>= 1;
}
cout << “M‘ file length: “ << TxtFileLength << endl;

BYTE *pTxtFile = new BYTE[TxtFileLength];
for (int i = 0 k = 0; i < TxtFileLength * 8; ++i)
{
if (i && i % 8 == 0)
++k;
if ((_pbm

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       3403  2010-06-13 15:07  Bmp24.cpp

     文件       1281  2010-06-13 15:07  Bmp24.h

     文件       1163  2010-06-13 15:07  Test.cpp

----------- ---------  ---------- -----  ----

                 5847                    3


评论

共有 条评论