📄 diy-lsb-infohiding.cpp
字号:
/*******************************************************/
/*
实验4:LSB算法隐藏个人信息
时间:2007年11月14日
05611 052054 19 丁于
Devil Diy
*/
/*******************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
void main(void)
{
FILE *fi,*fo,*ft;
int i,k;
char p;
char cp=3; //--二进制为00000011,目的是为了获取2bit信息
char ch=1;
//----位图信息获取
BITMAPFILEHEADER bmfh;
BITMAPINFO bmi;
fi = fopen("bupt.bmp","rb");
//读取文件头
fread(&bmfh,sizeof( bmfh ), 1,fi);
//读BMP信息头--------读彩色表
fread(&bmi,sizeof(BITMAPINFO),1,fi);
fclose(fi);
//--位图信息获取结束
//--图层信息处理:最后两位清零
fi = fopen("bupt.bmp","rb");
fo = fopen("buptdiy.bmp","wb");
ft = fopen("DiyInfo.txt","rb");
for(i=0;i<bmfh.bfSize;i++)
{
if (i>=bmfh.bfOffBits)
{//--bmfh.bfOffBits=1078为位图的图层数据起始点(1078=0436h)
fread(&p,sizeof( p ), 1,fi);
p=p>>2; //右移2位,左移2位清零
p=p<<2;
fwrite(&p,sizeof( p ),1,fo);
}
else
{//--不是图层数据的数据块直接写入到新文件中
fread(&p,sizeof( p ), 1,fi);
fwrite(&p,sizeof( p ),1,fo);
}
}
//--图层信息处理结束
//--个人信息写入
fseek(fi,bmfh.bfOffBits,SEEK_SET); //--找到原文件数据块起始点
fseek(fo,bmfh.bfOffBits,SEEK_SET); //--找到新文件数据块起始点
while((ch=getc(ft))!=-1)
{//得到一个字符直到文件结束
for(k=0;k<4;k++)
{ //--4次循环使ch的8bit信息分4次写入位图数据块中
fread(&p,sizeof( p ), 1,fi);
p=p>>2; //右移2位,左移2位,最后两位清零
p=p<<2;
p=p|(cp&ch); //--获得字符最后2bit的信息写入p的最后两位
fwrite(&p,sizeof( p ),1,fo);
ch=ch>>2; //--ch右移2位
}
}
//--信息隐藏完毕
//--设置文件结束标志
ch=7;//--ch=7,利用蜂鸣声作为结束,写入图层数据块中.
for(k=0;k<4;k++)
{
fread(&p,sizeof( p ), 1,fi);
p=p>>2; //右移2位,左移2位清零
p=p<<2;
p=p|(cp&ch);
fwrite(&p,sizeof( p ),1,fo);
ch=ch>>2;
}
fclose(fi);
fclose(fo);
fclose(ft);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -