目录实验目的二、实验环境实验内容实验步骤回答问题实验目的1、了解隐写技术的分类2、了解隐写技术的基本原理3、学会在图像中隐藏数据二、实验环境Windows Server 2008相关文件地址C:\Users\Administrator\Desktop\hidden\隐写技术实验内容通过学习“图像元数据”的实验指导了解在图像里隐藏信息的方法和软件的使用实现在图片属性上的隐写和在图片内容上的隐写。2、通过学习“隐写技术”的实验指导了解在图像中插入隐藏数据的方法。学习LSB方法的原理。实验步骤结合实验指导内容尝试通过软件实现在图像里隐藏数据给出实验过程和截图并加以解释说明隐藏了什么数据隐藏的数据在图像的位置。过程截图:打开图片1:最底部:打开图片2:最底部:隐藏:解释说明:隐藏了文字Im simple隐藏在批注区尝试运行“桌面-信息隐藏技术-BMP图像信息隐藏”文件夹下的代码给出运行结果的截图并说明每个代码的作用。1运行截图2代码解释clc;: 清除MATLAB命令窗口中的所有输出。clear all;: 清除工作区的所有变量确保没有旧数据会影响当前的脚本执行。wmrandsrc(1,300,[0 1]);: 生成一个1行300列的随机二进制数组其中的元素值为0或1用作水印。但请注意这里的代码有一个语法错误分号应该用英文字符且数字与符号间不需要加空格。fid fopen(test.bmp,r);: 打开一个名为test.bmp的位图文件以供读取。fid是一个文件标识符用于后续的文件操作。[a,length] fread(fid,inf,uint8);: 读取整个test.bmp文件内容到数组a中每个元素都被读取为一个8位无符号整数即字节。length将返回读取的元素总数。fclose(fid);: 关闭打开的图像文件释放资源。msgfid fopen(hidden.txt,r);: 打开一个名为hidden.txt的文件准备从中读取要隐藏的信息。[msg,count] fread(msgfid);: 读取hidden.txt文件的内容到msg数组count返回读取的元素数量。这里的代码应该是[msg,count] fread(msgfid);末尾的冒号应该是分号。fclose(msgfid);: 关闭打开的文本文件。wa a;: 创建数组a的副本名为wa用于后续操作以避免直接修改原始图像数据。j 1;: 初始化索引变量j用于遍历秘密信息的每个字节。k 54 count;: 计算要修改的数组元素的结束索引。因为位图文件的前54字节是文件头所以实际隐藏信息的开始位置是从第55个字节开始。wa(11) wa(11) count 1;: 修改位图文件头中某个特定位置第11个字节的值这可能是为了调整图像的某个属性以适应额外嵌入的数据。但实际上这行代码的目的可能被误解了因为通常不直接修改这部分。wa(3) wa(3) count 1;: 同上修改第3个字节这通常是文件大小字段但实际中我们不应随意更改这一部分。循环开始 for i55:k从第55个字节开始到k隐藏信息的长度加上起始点遍历这些位置。wa(i) uint8(msg(j,1));: 将秘密信息中的当前字节替换到图像的当前位置。j j 1;: 移动到秘密信息的下一个字节。循环结束。循环开始 for i55:length: 从第55个字节遍历到图像数据的末尾。wa(i 10) a(i);: 这行代码似乎试图在图像某部分插入额外的数据但这实际上可能会导致错误应该是拷贝原数据的意图但实现上可能有误。循环结束。figure;: 创建一个新的图形窗口。wa uint8(wa);: 确保wa数组中的所有值都是8位无符号整数类型。fid fopen(watermarked.bmp,wb);: 打开或创建一个名为watermarked.bmp的文件以供写入准备将修改后的图像数据保存到这个新文件。fwrite(fid,wa);: 将修改后的图像数据写入到watermarked.bmp文件中。fclose(fid);: 关闭文件结束写操作。imshow(watermarked.bmp);: 显示新生成的带有隐藏信息的位图图片。2.1 运行截图2代码解释clc;: 清除MATLAB命令窗口中的所有输出。clear all;: 清除工作区的所有变量以防旧数据影响脚本的执行。fid fopen(test.bmp,r);: 打开一个名为test.bmp的位图文件用于读取。fid是文件标识符用于后续的文件操作。[a,length] fread(fid, inf, uint8);: 以8位无符号整数的形式读取test.bmp文件的全部内容并存储在数组a中。length变量将包含读取的总字节数。fclose(fid);: 关闭已打开的文件释放系统资源。3。1运行截图2代码解释clc;: 清除MATLAB命令窗口中的所有输出。clear all;: 清除工作区的所有变量以防旧数据影响脚本执行。fid fopen(test.bmp,r);: 打开名为test.bmp的图像文件用于读取。r表示以只读方式打开文件。fid是一个文件标识符用于后续的文件操作。[a,length] fread(fid,inf,uint8);: 以8位无符号整数的格式读取文件test.bmp的全部内容到数组a中length变量存储读取的总字节数。fclose(fid);: 关闭文件test.bmp释放由fopen占用的资源。fid fopen(test.bmp,r);: 再次打开文件test.bmp为了执行不同的文件操作。status fseek(fid,2,bof);: 将文件的位置指示器移动到文件开始处后的第2个字节。bof表示基于文件的开头此操作用于跳过BMP文件头的前两个字节。fileb fread(fid,4,uint8);: 从当前位置即文件的第3个字节开始读取4个字节。这些字节包含了文件的大小信息。filelength fileb(1)*1 fileb(2)*256 fileb(3)*256^2 fileb(4)*256^3;: 计算文件头中记录的文件长度。由于BMP文件的大小信息是以小端模式存储的这行代码正确地将这4个字节转换为文件长度。diff length-filelength;: 计算文件的实际长度和文件头中记录的长度之间的差值。如果有差异这可能表明在文件中隐藏了额外的信息。fclose(fid);: 关闭文件。diff: 显示变量diff的值即隐藏信息的长度。回答问题什么是Exif可交换图像文件格式是专门为数码相机的照片设定的可以记录数码照片的属性信息和拍摄数据。Exif最初由日本电子工业发展协会在1996年制定版本为1.0。1998年升级到2.1增加了对音频文件的支持。2002年3月发表了2.2版。Exif可以附加于JPEG、TIFF、RIFF等文件之中为其增加有关数码相机拍摄信息的内容和索引图或图像处理软件的版本信息。Windows 7操作系统具备对Exif的原生支持通过鼠标右键点击图片打开菜单点击属性并切换到详细信息标签下即可直接查看Exif信息。Exif信息是可以被任意编辑的因此只有参考的功能。Exif信息以0xFFE1作为开头标记后两个字节表示Exif信息的长度。所以Exif信息最大为64 kb而内部采用TIFF格式。什么是LSB最低有效位英文全称是the least significant bit缩写为lsb是指一个二进制数字中的第0位即最低位具有权值为2^0可以用它来检测数的奇偶性。与之相反的称之为最高有效位。在大端序中lsb指最右边的位。