LSB信息隐藏的卡方分析

本文深入探讨了使用Least Significant Bit(LSB)技术进行信息隐藏的方法,并通过Python实现了一种基于卡方统计分析的检测试验。内容涵盖了LSB原理、信息嵌入过程,以及如何利用numpy库进行卡方分析,以评估隐藏信息的不可见性和安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、实验目的

  1. 了解什么是隐写分析(steganalysis),隐写分析与信息隐藏和数字水印的关系。
  2. 掌握基于图像的LSB隐写的分析方法,设计并实现一种基于图像的LSB卡方隐写分析方法。

二.实验环境

Windows操作系统

Python3.9

Pycharm2019.3.3

三、实验原理

(1)隐写术和隐写分析技术从本质上来说是互相矛盾的,但是两者实际上又是相互促进的。隐写分析是指对可疑的载体信息进行攻击以达到检测、破坏,甚至提取秘密信息的技术,它的主要目标是为了揭示媒体中隐蔽信息的存在性,甚至只是指出媒体中存在秘密信息的可疑性。

(2)图像LSB信息隐藏的方法是用嵌入的秘密信息取代载体图像的最低比特位,原来图像的7个高位平面与代表秘密信息的最低位平面组成含隐蔽信息的新图像。虽然LSB隐写在隐藏大量信息的情况下依然保持良好的视觉隐蔽性,但使用有效的统计分析工具可判断一幅载体图像中是否含有秘密信息。

(3)目前对于图像LSB信息隐藏主要分析方法有卡方分析、信息量估算法、RS分析法和GPC分析法等。本节介绍卡方分析方法。卡方分析的步骤如下:

设图像中灰度值为j的像素数为hj,其中0<=j<=255。如果载体图像未经隐写,h2ih2i+1的值会相差得很远。秘密信息在嵌入之前往往经过加密,可以看作是0、1随机分布的比特流,而且值为0与1的可能性都是1/2。如果秘密信息完全替代载体图像的最低位,那么h2ih2i+1的值会比较接近,可以根据这个性质判断图像是否经过隐写。接下来,定量分析载体图像最低位完全嵌入秘密信息的情况。嵌入信息会改变直方图的分布,由差别很大变得近似相等,但是却不会改变h2i+h2i+1的值,因为样值要么不改变,要么就在h2i

要进行图像信息隐藏的卡分析并绘制statistic图像和p值图像,可以按照以下步骤操作: 1. 导入必要的库和模块,如numpy、cv2、scipy.stats等。 ```python import numpy as np import cv2 from scipy.stats import chi2_contingency ``` 2. 读取图像并将其转换为灰度图像。然后将其转换为二进制形式,以便进行信息隐藏。 ```python img = cv2.imread('image.png') gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) binary_img = cv2.threshold(gray_img, 127, 255, cv2.THRESH_BINARY)[1] ``` 3. 定义信息隐藏函数,将信息嵌入到二进制图像中。这里采用的是最简单的LSB(最低有效位)算法。 ```python def hide_data(binary_img, data): data_len = len(data) data_index = 0 for i in range(binary_img.shape[0]): for j in range(binary_img.shape[1]): if data_index >= data_len: return binary_img binary_img[i][j] = (binary_img[i][j] & 254) | int(data[data_index]) data_index += 1 return binary_img ``` 4. 调用hide_data函数将信息嵌入到二进制图像中。 ```python data = 'Hello, world!' binary_img_with_data = hide_data(binary_img, ''.join(format(ord(c), '08b') for c in data)) ``` 5. 计算卡值、p值和自由度,并绘制statistic图像和p值图像。 ```python def analyze_data(binary_img, binary_img_with_data): # 计算直图 hist, bins = np.histogram(binary_img.flatten(), 2, [0, 256]) hist_with_data, bins_with_data = np.histogram(binary_img_with_data.flatten(), 2, [0, 256]) # 计算卡值、p值和自由度 chi2, p, dof, expected = chi2_contingency([hist, hist_with_data]) print('卡值:', chi2) print('p值:', p) print('自由度:', dof) # 绘制statistic图像和p值图像 import matplotlib.pyplot as plt fig, ax = plt.subplots(1, 2, figsize=(12, 6)) ax[0].bar(['Original', 'Modified'], [hist[0], hist_with_data[0]]) ax[0].set_xlabel('Pixel value') ax[0].set_ylabel('Frequency') ax[0].set_title('Statistic') ax[1].bar(['Original vs. Modified'], [p]) ax[1].set_ylim(0, 1) ax[1].set_xlabel('Comparison') ax[1].set_ylabel('p-value') ax[1].set_title('p-value') plt.show() analyze_data(binary_img, binary_img_with_data) ``` 这样就可以进行图像信息隐藏的卡分析并绘制statistic图像和p值图像了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值