工作报告之信息隐藏实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信息隐藏实验报告
【篇一:合肥工业大学信息隐藏实验报告完整代码版】计算机与信息学院
专业班级
学生姓名及学号
课程教学班号
任课教师
实验指导教师
实验地点
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()
void highswitch() //还没有解决碰撞问题
int caculatechar4(char fun[4])//计算4个char的十进制大小权重 1 3 2
int caculatelastbit4(char zifu)//计算字节的最后四位代表的十进制数
char calculateaddlast4bit(char pt,int colornumber)//第一个字符的前四位保留后四位用这个int 改成的二进制替换
class color16//16色颜色元
{public: char bit4[4];
int myposision;
int bitnumber;//char bit[4] 10进制
int colornumber;//第几个颜色 0到15号颜色
};
class colortable16//16色颜色表
{public: colortable16()
void setcolortable(char fun[4],int colornumber)
void exchange()//排序
int getnextcolornumber(char zifu)//得到相近颜色的颜色好
int mycolortable16number;
color16 mycolortable16[17];
};
void middlehidepluspower132()
void highhidepluspower132()
void discodehighhidepluspower132()//解密函数
六、测试数据
隐藏信息: