Visual C++ 7.1Visual Studio 6Visual C++ 7.0Visual Studio .NET 2003Windows 2003Windows 2000Visual C++ 6.0Windows XPMFC中级开发Visual StudioWindowsC++
将文件隐藏在 BMP 文件中 (Plus)。






4.71/5 (22投票s)
2003年11月28日
1分钟阅读

83395

3093
将文件隐藏在 BMP 文件中:扩展自作者 Ahmed Osama 的文章。
引言
在阅读了 '将文本文件隐藏在 BMP 文件中' 这篇文章后,我发现它很有趣,也许还有用。所以我决定扩展它,使其适用于任何文件、任何密码,并且易于使用。
背景
你可以在这里找到它的原理:将文本文件隐藏在 BMP 文件中。非常感谢 Ahmed Osama 的想法和优秀的工作。
类结构
class CBmpHermitCrab { ... public: bool Hermit(const char* pszDestFileName, const char* pszSrcFileName, const char* pszPassword=NULL, const char* pszResultFile=NULL); bool IsHermitCrabBMPFile(const char* pszFileName); bool RecoverCrabFile(const char* pszFileName, const char* pszPassword=NULL, const char* pszPath=NULL); };
它提供了三种方法来实现以下任务
Hermit()
。将文件隐藏在 BMP 文件中。主要代码
... nIndex=0; for(int i=0;i<(iBinaryLen/8); i++){ temp= m_binaryMap[(unsigned char) strBufferAll[i]]; srcBinary[nIndex] = temp[0]; srcBinary[nIndex+1] =temp[1]; srcBinary[nIndex+2] =temp[2]; srcBinary[nIndex+3] =temp[3]; srcBinary[nIndex+4] =temp[4]; srcBinary[nIndex+5] =temp[5]; srcBinary[nIndex+6] =temp[6]; srcBinary[nIndex+7] =temp[7]; nIndex=nIndex+8; } int mask=254; for (i=0 ; i<iBinaryLen ; i++){ bmpBuffer[i+55]=bmpBuffer[i+55] & mask; if (srcBinary[i]=='1') bmpBuffer[i+55]=bmpBuffer[i+55]+1; } ...
通过我们的二进制表
srcBinary
和正确的索引,我们可以使用原始像素颜色值的微小变化来表示一个字符。RecoverCrabFile()
。从 HermitCrab ;) BMP 文件中恢复隐藏的文件。关键代码
... for(j=55+8*nHeadSize; j < 55+8*nHeadSize +pHermitCrabHead->bPasswordLen*8+ pHermitCrabHead->bFileNameLen*8;j++){ recBin[j]= (unsigned char) ((unsigned char)buffer[j] & 1); } CString strTemp; for(j=55+8*nHeadSize; j < 55+8*nHeadSize+pHermitCrabHead->bPasswordLen*8+ pHermitCrabHead->bFileNameLen*8;j=j+8){ temp=128*recBin[j]+64*recBin[j+1]+32*recBin[j+2]+ 16*recBin[j+3]+8*recBin[j+4]+4*recBin[j+5]+ 2*recBin[j+6]+1*recBin[j+7]; strTemp+=temp; } ...
IsHermitCrabBMPFile()
。类似于方法 2,但它只恢复前 8 个字节,并检查前两个字节是否为 'C' 和 'H'。
使用代码
- 包含 BmpHermitCrab.h 文件。
- 生成一个
CBmpHermitCrab
实例。 - 使用该实例,可以使用
Hermit()
方法将文件隐藏在 BMP 文件中,并可以选择密码,并使用RecoverCrabFile()
方法从 'HermitCrab' BMP 文件中恢复文件。你可以使用IsHermitCrabBMPFile()
方法检查 BMP 文件格式。
希望你喜欢这个程序!