📄 main.cpp
字号:
#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
/*
//位图文件头
typedef struct tagBITMAPFILEHEADER {
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER;
typedef struct tagBITMAPINFOHEADER {
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER;
//彩色表
typedef struct tagRGBQUAD {
BYTE rgbBlue;
BYTE rgbGreen;
BYTE rgbRed;
BYTE rgbReserved;
} RGBQUAD;
//位图信息头
typedef struct tagBITMAPINFO {
BITMAPINFOHEADER bmiHeader;
RGBQUAD bmiColors[1];
} BITMAPINFO;
*/
void main()
{
BITMAPFILEHEADER bmfh;
BITMAPINFO bmi;
FILE *fi;
if((fi = fopen("bupt.bmp","rb+"))==0)
{printf("cannot open the first file\n");
exit(0);}//打开图片文件
FILE *fo;
if((fo = fopen("个人信息.txt","rb+"))==0)
{printf("cannot open the second file\n");
exit(0);}//打开信息文本
//读取文件头
fread(&bmfh,sizeof( bmfh ),1,fi);
printf("文件头信息:\n");
printf("文件类型:%c%c\n",bmfh.bfType%256 ,bmfh.bfType/256);
printf("文件大小:%d\n",bmfh.bfSize);
printf("图像数据偏移量:%d\n",bmfh.bfOffBits);
//读BMP信息头--------读彩色表
fread(&bmi,sizeof(BITMAPINFO),1,fi);
printf("\n图像信息:\n");
printf("位图宽度:%d\n",bmi.bmiHeader.biWidth);
printf("位图高度:%d\n",bmi.bmiHeader.biHeight);
printf("每个像素的位数:%d\n",bmi.bmiHeader.biBitCount);
printf("位图数据的大小:%d\n",bmi.bmiHeader.biSizeImage);
printf("用像素/米表示的水平分辨率:%d\n",bmi.bmiHeader.biXPelsPerMeter);
printf("用像素/米表示的垂直分辨率:%d\n",bmi.bmiHeader.biYPelsPerMeter);
printf("每个像素的位数:%d\n",bmi.bmiHeader.biBitCount);
printf("位图使用的颜色数:%d\n",bmi.bmiHeader.biClrUsed);
//隐藏信息
long i=0,j,m;
byte q,c,p,s,t;
//判断载体是否足够
while(!feof(fo))
{
i++;
fread(&c,1,1,fo);
}
i=i-1;
printf("\nThe size of 个人信息.txt is %u bytes.\n",i);
q=0x40;
q=(q>>6);
c=0;
fseek(fi,bmfh.bfOffBits,0);
fseek(fo,-i,1);//将两文件指针指在初始位置
printf("\nOriginal txt information is:\n");
for(m=0;m<i;m++)//按隐藏信息的大小做循环
{
fread(&c,1,1,fo);
printf("%c",c);
for(j=0;j<8;j++)//将c指向的1byte分别写到p指向的8byte的最后一位
{
fread(&p,1,1,fi);
p=(p>>1);
p=(p<<1);//最低位清零
s=q;
s=(s<<j);
t=(c&s);
t=(t>>j);
p=(p+t);
fseek(fi,-1,1);
fwrite(&p,1,1,fi);
}
}
printf("\n");
printf("\n");
//提取隐藏信息
FILE *f;
if((f = fopen("file.txt","wb"))==0)
{printf("cannot open the third file\n");
exit(0);}//打开新文件
q=0x40;
q=q>>6;
fseek(fi,bmfh.bfOffBits,0);
printf("The information picks up from the graph is:\n");
for(m=0;m<i;m++)//提取所隐藏的信息
{
c=NULL;
for(j=0;j<8;j++)
{
fread(&p,1,1,fi);
p=(p&q);
p=(p<<j);
c=(c+p);
}
fwrite(&c,1,1,f);//将信息写入新文件
printf("%c",c);//并打印在屏幕上
}
printf("\n");
fclose(f);
fclose(fo);
fclose(fi);//关闭文件
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -