65.9K
CodeProject 正在变化。 阅读更多。
Home

将文件隐藏在 BMP 文件中 (Plus)。

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.71/5 (22投票s)

2003年11月28日

1分钟阅读

viewsIcon

83395

downloadIcon

3093

将文件隐藏在 BMP 文件中:扩展自作者 Ahmed Osama 的文章。

Sample Image - HideIt2.jpg

引言

在阅读了 '将文本文件隐藏在 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);
};

它提供了三种方法来实现以下任务

  1. 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=254for (i=0 ; i<iBinaryLen ; i++){
          bmpBuffer[i+55]=bmpBuffer[i+55] & mask;
          if (srcBinary[i]=='1')  
            bmpBuffer[i+55]=bmpBuffer[i+55]+1;
      }
     ...

    通过我们的二进制表 srcBinary 和正确的索引,我们可以使用原始像素颜色值的微小变化来表示一个字符。

  2. 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;
     } 
    ...
  3. IsHermitCrabBMPFile()。类似于方法 2,但它只恢复前 8 个字节,并检查前两个字节是否为 'C' 和 'H'。

使用代码

  1. 包含 BmpHermitCrab.h 文件。
  2. 生成一个 CBmpHermitCrab 实例。
  3. 使用该实例,可以使用 Hermit() 方法将文件隐藏在 BMP 文件中,并可以选择密码,并使用 RecoverCrabFile() 方法从 'HermitCrab' BMP 文件中恢复文件。你可以使用 IsHermitCrabBMPFile() 方法检查 BMP 文件格式。

希望你喜欢这个程序!

© . All rights reserved.