基于Python的BMP信息隐藏实验

实验原理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

实验步骤

本练习主机A、B为一组,C、D为一组,E、F为一组。
首先使用“快照X”恢复Windows系统环境。
一. 分析BMP图像文件头和信息头
(1)单击工具栏“UE”按钮,打开C:\ExpNIS\Encrypt-Lab\Tools\Watermark\BMP目录下的pic1.bmp文件。
(2)首先根据表11-1-1找到图像文件头和图像信息模块,填写表11-1-2内容。
表11-1-1 bmp图像文件头和图像信息表
BMP文件头
(14字节) 0000-0001(2字节) 文件标识,为字母ASCII码“BM”
0002-0005(4字节) 文件大小,高位高字节
0006-0009(4字节) 保留字,每字节以“00”填写
000A-000D(4字节) 记录图像数据区的起始位置,为36H
图像信息头
(共40字节) 000E-0011(4字节) 图像描述信息块大小,常为28H
0012-0015(4字节) 图像宽度
0016―0019(4字节) 图像高度
001A-001B(2字节) 图像的位面数,该值总为1
001C-001D(2字节) 记录像素的位数,图像的颜色数由该值决定
001E-0021(4字节) 数据压缩方式(0:不压缩;1:8位压缩;2:4位压缩)
0022-0025(4字节) 用字节数表示的图像数据的大小,该数必须是4的倍数,数值上等于图像宽度×图像高度×每个像素位数
0026-0029(4字节) 水平每米有多少像素,在设备无关位图(.DIB)中,每字节以00H填写
002A-002D(4字节) 垂直每米有多少像素,在设备无关位置(.DIB)中,每字节以00H填写
002E-0031(4字节) 图像所用的颜色数
0032-0035(4字节) 对图像显示有重要影响的颜色索引的数目。如果是0,表示都很重要
颜色表
(非必有) 颜色表的大小根据所使用的颜色模式而定:2色图像为8字节;16色图像位64字节;256色图像为1024字节;24位真彩色图像则没有颜色表这一块。其中,每4字节表示一种颜色,并以B(蓝色)、G(绿色)、R(红色)、alpha(32位位图的透明度值,一般不需要)。即首先4字节表示颜色号1的颜色,接下来表示颜色号2的颜色,依此类推。
图像数据区 颜色表接下来位为位图文件的图像数据区,在此部分记录着每点像素对应的颜色号,其记录方式也随颜色模式而定,即2色图像每点占1位(8位为1字节);16色图像每点占4位(半字节);256色图像每点占8位(1字节);真彩色图像每点占24位(3字节)。所以,整个数据区的大小也会随之变化。究其规律而言,可得出如下计算公式:图像数据信息大小=(图像宽度图像高度记录像素的位数)/8。

表11-1-2
整个文件的大小 00240063h=2359350
从文件开始到图像数据区之间的偏移量 00000036h=54
每个像素的位数 0018h=24
压缩类型 00000000=不压缩
图像数据的大小 00240000=2359296
二. 位图法隐藏和传递信息
(1)本机首先将要隐藏和传递的原始信息记录下来 核平先生
(2)对原始信息进行编码转换,要求:如果要传输中文,打开汉字Unicode编码表,按照对应规则将它们转换为十六进制代码,再转换为二进制代码;如果要传输英文,打开ASCII码对照表,按照对应规则将它们转换为十六进制代码,再转换为二进制代码。
「注」 因为中英文对照表不同,所以隐藏明文不能中英文混合。
请将转换完成的信息代码(二进制代码)记录在这里 0110100000111000010111100111001101010001010010000111010100011111
原始信息长度是 04 个字符,这个长度的二进制值是 00000100
原始信息文字类型(即文件标识符) 01 ,其二进制值是 00000001
(3)将原始信息长度代码和文字类型代码追加至原始信息中,然后利用位图法修改BMP图像对应的位,完成信息嵌入工作,具体操作如下:
使用UltraEdit打开图片pic1~pic5中的任意一张,找到图像数据区的开始位置。利用位图法修改BMP图像,将转换后的信息长度代码和信息代码嵌入到BMP图片中,并观察图像视觉上是否有变化,然后将该图片发送到同组主机D:\Work\Picture共享目录下。
(4)同组主机收到图片后,使用UltraEdit打开该图片,首先找到图像数据区的开始位置,读出文字类型 和传输信息的长度 。利用位图法提取隐藏在图片中的数据信息,请将提取出来的二进制代码记录在下面 。
(5)根据隐藏信息的文字类型,将提取出来的二进制代码反向翻译成明文信息,并将明文信息记录在下面: 。
(6)确定提取出的最终明文信息与原文相一致。

实验过程

图片的十六进制数,0070开始是图像数据区,所以我从这里开始
选取隐藏信息的十六进制矩阵

实验代码

#针对信息隐藏实验一的BMP加密算法,支持输入中文生成隐藏信息后的十六进制矩阵,英文懒得弄了

def is_contains_chinese(strs):
    for _char in strs:
        if '\u4e00' <= _char <= '\u9fa5':
            return True
    return False

# def is_contains_english(strs):
#     contsTF = 0
#     for _char in strs:
#         if (ord(_char) in range(97,1
  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值