⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄

📁 基于LSB的信息隐藏
💻
字号:
//---------------------------------------------
  //  基于LSB的信息隐藏
  //---------------------------------------------
  int  FTDib::LSBCoder(const char* textFileName)
  {
      ifstream textFile;
      textFile.open(textFileName,ios::in | ios::binary);
      textFile.seekg(0,textFile.end);
      DWORD textFileLength = textFile.tellg();
     //判断位图是否够存储隐藏的信息
     DWORD colorTableSize = m_numberOfColors * sizeof(RGB_Element);
     if((size - colorTableSize)<textFileLength*8)
     {
         return -1; //不够隐藏
     }
 
 
     BYTE* pTextFile = new BYTE[textFileLength+1];
     cout<<"隐藏时文件长度:"<<textFileLength<<endl;
     textFile.seekg(0,textFile.beg);
     textFile.read((char*)pTextFile,textFileLength);
     textFile.close();
 
     BYTE textData;
     for(int i=0,k=0; i< textFileLength; ++i)
     {
         for(int j=0; j<8; ++j)
         {
             textData = pTextFile[i]>>j;
             textData = textData&0x01;
             if(textData==0)
             {
                 pDib[k+32] = pDib[k+32]&0xfe;
             }
             else
             {
                 pDib[k+32] = pDib[k+32]|0x01;
             }
             ++k;
         }
     }
     cout<<"信息隐藏完毕"<<endl;
     //在前四个字节中写入text文件数据长度
     DWORD length;
     for(int i=0; i<32; ++i)
     {
         length = textFileLength>>i;
         length = length&0x00000001;
         if(length==0)
         {
             pDib[i] = pDib[i]&0x1e;
         }
         else
         {
            pDib[i] = pDib[i]|0x01;
        }
    }
 
    return 0;

 }
 //---------------------------------------------
//  解码基于LSB的信息隐藏
//---------------------------------------------
void  FTDib::LSBDecoder(const char* textFileName)
{
    DWORD length = 0x00000000;
    BYTE bit;
    //获取txt文件长度
    for(int i=0; i<32; ++i)
    {
        bit = pDib[i]&0x01;
        if(bit==0)
        {
            length = length&0x7fffffff;
        }
        else
        {
            length = length|0x80000000;
        }
        if (i<31)    length = length>>1;
    }

    cout<<"解码时文件长度:"<<length<<endl;
    //开始解码
    BYTE* pTextFile = new BYTE[length];
    BYTE textData;
    for(int i=0,k=0; i<length*8; ++i)
    {
        if(i && i%8==0){++k;}
        textData = pDib[i+32]&0x01;
        if(textData==0)
        {
            pTextFile[k] = pTextFile[k]&0x7f;
        }
        else
        {
            pTextFile[k] = pTextFile[k]|0x80;
        }
        if (i%8 != 7) pTextFile[k] = pTextFile[k]>>1;
    }

    cout<<"解码完毕"<<endl;

    ofstream textFile;
    textFile.open(textFileName,ios::out | ios::binary);
    textFile.write((char*)pTextFile,length);
    textFile.close();
    delete pTextFile;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -