代码拉取完成,页面将自动刷新
import random
import struct
# 打开bmp文件
with open('example.bmp', 'rb') as f:
# 读取文件头信息
bmp_header = f.read(54) # BMP文件头长度为54字节
# 解析bmp文件头信息
magic_num, size, _, _, offset = struct.unpack_from("<2sIHHI", bmp_header)
# 输出图像信息
print(f"Magic number: {magic_num.decode()}")
print(f"File size: {size} bytes")
print(f"Image data offset: {offset} bytes")
# 解析位图信息头长度
info_header_length = struct.unpack_from("<I", bmp_header, offset=14)[0]
# 判断图像类型
if info_header_length == 40:
planes, bit_count = struct.unpack_from("<HH", bmp_header, offset=26)
if planes == 1 and bit_count == 8:
print("Image type: 256灰度图")
elif planes == 1 and bit_count == 24:
print("Image type: 24位真彩图")
else:
print("Unknown image type")
else:
print("Unsupported BMP format")
# 获取图像宽度和高度
width, height = struct.unpack_from("<ii", bmp_header, offset=18)
# 判断图像大小是否小于512x512像素
if width > 512 or height > 512:
print("图像大小大于512x512像素")
else:
print(f"图像大小为 {width}x{height} 像素")
# 读取图像数据
f.seek(offset) # 定位到图像数据的开始位置
data = f.read()
# 定义一个函数,将数据写入LSB中
def write_lsb(byte, bit):
# 将字节的最后一位设置为指定的比特
return (byte & 0xFE) | bit
# 从txt文件中读取要加密的内容并进行处理
with open('message.txt', 'r') as message_file:
content = message_file.read().strip() # 读取文件内容并去除首尾空白字符
# 重复内容并添加零
content_with_zeros = ''
for _ in range(1000):
content_with_zeros += content + '.' * 10
# 将需要隐藏的数据转换为比特流
message_bytes = content_with_zeros.encode('utf-8')
# 将数据写入到图像数据中
bit_index = 0
for i, byte in enumerate(data):
if bit_index >= len(message_bytes) * 8 or i >= len(data):
# 数据已经写满,退出循环
break
# 从要写入的字节中读取比特
bit = (message_bytes[bit_index // 8] >> (bit_index % 8)) & 0x01
# 将比特写入到当前字节的LSB中
data = data[:i] + bytes([write_lsb(byte, bit)]) + data[i+1:]
bit_index += 1
# 获取图像像素数据的起始位置
pixel_data_offset = offset
# 添加噪声到图像像素数据中
for i in range(pixel_data_offset, len(data)):
# 根据概率决定是否进行异或操作
if random.random() < 0.05:
# 对第 i 个字节进行异或操作
data = data[:i] + bytes([data[i] ^ random.randint(0, 255)]) + data[i+1:]
# 将修改后的图像数据写入新的bmp文件
with open('example_noise.bmp', 'wb') as f:
f.write(bmp_header + data)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。