資源簡介
基于LSB的圖片數據隱藏c++類,可以在Bmp文件中隱藏文件

代碼片段和文件信息
/*********************************************
*??功能:基于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?<“+-----------+“?< ?<“Read?bmfh?OK!“?< InFile.read((char*)_pbmih?sizeof(tagBITMAPINFOHEADER));
cout?<“Read?bmih?OK!“?<
//直接定位BMP數據區,跳過調色板
_size?=?_pbmfh->bfSize?-?_pbmfh->bfOffBits;
_pbmd?=?new?BYTE[_size];
InFile.read((char*)_pbmd?_size);
cout?<“Read?bmd??OK!“?< InFile.close();
cout?<“Load?file?OK!“?< ?<“+-----------+“?<}
//保存BMP文件
void?Bmp24::SaveFile(const?char?*filename)
{
ofstream?OutFile;
OutFile.open(filename?ios::out?|?ios::binary);
OutFile.write((char*)_pbmfh?sizeof(tagBITMAPFILEHEADER));
cout?<“+============+“?< ?<“Write?bmfh?OK!“?< OutFile.write((char*)_pbmih?sizeof(tagBITMAPINFOHEADER));
cout?<“Write?bmih?OK!“?< OutFile.write((char*)_pbmd?_size);
cout?<“Write?bmd??OK!“?< OutFile.close();
cout?<“Save??file?OK!“?< ?<“+============+“?<}
//嵌入文本文件
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? {
return?;
}
cout?<“M??file?length:?“?< BYTE?*pTxtFile?=?new?BYTE[TxtFileLength];
TxtFile.seekg(0?TxtFile.beg);
TxtFile.read((char*)pTxtFile?TxtFileLength);
TxtFile.close();
for?(int?i?=?0?k?=?0;?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!“?<}
//提取文本文件
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:?“?<
BYTE?*pTxtFile?=?new?BYTE[TxtFileLength];
for?(int?i?=?0?k?=?0;?i? {
if?(i?&&?i?%?8?==?0)
++k;
if?((_pbm
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????1163??2010-06-13?15:07??Test.cpp
?????文件???????3403??2010-06-13?15:07??Bmp24.cpp
?????文件???????1281??2010-10-27?12:42??Bmp24.h
?????文件???????4028??2010-10-26?21:37??LSB.vcproj
-----------?---------??----------?-----??----
?????????????????9875????????????????????4
- 上一篇:汽車修理廠管理系統(C++開發)
- 下一篇:TDMA算法 C語言編寫
評論
共有 條評論