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

📄 diy-lsb-infohiding.cpp

📁 基于BMP的最低有效位的数字水印隐藏技术
💻 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 + -