可逆信息隐藏python
时间: 2023-12-15 17:32:54 浏览: 76
可逆信息隐藏是指在不影响载体文件的情况下,将信息隐藏在载体文件中,并且可以完全恢复原始载体文件和隐藏的信息。下面是一个可逆信息隐藏的Python实现:
```python
import cv2 as cv
import matplotlib.pyplot as plt
import numpy as np
# 加载载体图像
img = cv.imread('carrier.png', cv.IMREAD_GRAYSCALE)
# 加载需要隐藏的信息
msg = 'Hello, world!'
msg_bin = ''.join(format(ord(i), '08b') for i in msg)
msg_len = len(msg_bin)
# 将信息长度嵌入到载体图像中
max_a = img.shape[0] * img.shape[1]
if max_a < msg_len:
print('Error: message too long to embed!')
exit()
BookKeeping = format(msg_len, 'b').zfill(32)
for i in range(32):
img[i // img.shape[1], i % img.shape[1]] = (img[i // img.shape[1], i % img.shape[1]] & 254) | int(BookKeeping[i])
# 将信息嵌入到载体图像中
Hidden_Data = np.zeros(msg_len, dtype=np.uint8)
for i in range(msg_len):
Hidden_Data[i] = int(msg_bin[i])
img[(i + 32) // img.shape[1], (i + 32) % img.shape[1]] = (img[(i + 32) // img.shape[1], (i + 32) % img.shape[1]] & 254) | Hidden_Data[i]
# 从载体图像中提取信息
Recover_Data = np.zeros(msg_len, dtype=np.uint8)
for i in range(msg_len):
Recover_Data[i] = img[(i + 32) // img.shape[1], (i + 32) % img.shape[1]] & 1
# 验证隐藏数据与提取数据一致性
Flag = 0
for i in range(len(Hidden_Data)):
if Hidden_Data[i] != Recover_Data[i]:
Flag = 1
break
if Flag == 0:
print('数据提取成功')
else:
print('数据提取失败')
```
上述代码中,我们首先加载了一个灰度图像作为载体图像,然后将需要隐藏的信息转换为二进制字符串,并将其长度嵌入到载体图像的前32个像素中。接着,我们将信息的每一位都嵌入到载体图像的像素中。最后,我们从载体图像中提取出隐藏的信息,并与原始信息进行比较,以验证信息隐藏的正确性。
阅读全文