合肥工业大学信息隐藏实验报告 完整代码版
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机与信息学院
信息隐藏实验报告
专业班级
信息安全13-1班
学生姓名及学号
马骏 2013211869 课程教学班号
任课教师
郑淑丽
实验指导教师
郑淑丽
实验地点
20 ~20 学年第学期
实验1 BMP位图信息隐藏
一、实验目的
学习BMP格式文件,并编程实现对位图文件信息隐藏
二、实验要求
将TXT文件嵌入BMP 文件中
三、问题描述
1、BMP位图文件的格式?
2、有哪几种方法隐藏信息,分别采用什么样的数据结构
3、随机选取如何避免“碰撞”的出现
四、算法思想
1、BMP位图文件格式
0000h~0001h 2字节-------------------------bm的ASC码
0002h~0005h 4字节-------------------------文件大小102718字节
0006h~0009h 4字节-------------------------全为0
000Ah~000Dh 4字节-------------------------偏移量118字节
000Eh~0011h 4字节-------------------------位图信息块大小40字节
0012h~0015h 4字节-------------------------宽450
0016h~0019h 4字节-------------------------高450
001Ah~001Bh 2字节-------------------------恒为01h 00h
001Ch~001Dh 2字节-------------------------颜色所占二进制位数值04h 00h=4 16色位图
001Eh~0021h 4字节-------------------------压缩方式=0无压缩
0022h~0025h 4字节-------------------------图像数据区大小102600字节
0026h~0029h 4字节-------------------------水平每米多少像素39个
002Ah~002Dh 4字节-------------------------垂直每米多少像素39个
002Eh~0031h 4字节-------------------------图像所用颜色数=0
0032h~0035h 4字节-------------------------重要颜色数=0
0036h~0076h 64字节-------------------------颜色表
0077h~1913Dh 102600字节-------------------------图像数据区
2、
(1)、在图片图像数据区的一个连续的数据区采用整字节替换的方法
(2)、在图像数据的最后增加文本信息的字节
(3)、顺序选取每个文本信息字节的每一位替换图像数据区的一个连续的数据区每个字节的最后一位。
(4)、顺序选取每个文本信息字节的每一位替换图像数据区随机选取一个字节的最后一位。
(5)、首先对颜色表排序,比对顺序选取每个文本信息字节的每一位与图像数据区的一个连续的数据区每个字节的最后一位,如果不一致则不断选取相近的颜色,直到颜色序号二进制最后一位与文本信息的字节最后一位一致。
(6)首先对颜色表排序,比对顺序选取每个文本信息字节的每一位与图像数据区的随机选取的数据区每个字节的最后一位,如果不一致则不断选取相近的颜色,直到颜色序号二进制最后一位与文本信息的字节最后一位一致。
3、为了避免“碰撞”则隐藏程序和解密程序需要通过一个协议,规定一个像素点只能使用一次,即隐藏时对使用过的像素点做记录,如果像素点使用过,则产生下一个随机数。
五、模块划分
const int max=500000;
char huancun[max];//从文件中读入的字符
char txthuancun[max];//txt 中的字符
char writehuancun[max];//可以写进文件中的字符串
long int writehuancunnumber=0;//准备写入文件中的个数
long int huancunnumber=0;//从文件中读出字符个数
long int txthuancunnumber=0;
void read(const char* realfile)//读入huancun[]
void txtread(const char* realfile)//读入txthuancun[]
void write(const char*yasuofile)
void deal8bit(char kp)//仅仅是显示二进制文件的函数
void easyswitch()//简单的从100开始置换
void endswitch()
int calculate8bit(char kp,int byte)//返回一个字符第byte位为0 或1 从右往左数
int getbegin()//得到偏移量的大小下一个就是数据区的开始即begin的值
char chang8bit(char inputtxt,char bmp,int byte)//txt的第byte 被bmp第八位代替从左向右char changelastbyte(char bmpinput,char txt,int byte) //bmp字节的第8位被txt字节的第byte 位代替从左向右
void middleswitch()