关于LSB图像水印(含代码连接)

近期学习了LSB隐写算法,将有关笔记简单整理在此。
(我的LSB图像水印python代码见:https://github.com/iA-oO/my_stegano

LSB与LBS概念

LSB(Least Significant Bit):

是指将信息嵌入到像素的最低有效位(最不显著位)中。通过将需要隐藏的信息的二进制值替换为像素的LSB,可以在图像或音频文件中隐藏信息,同时对人眼或耳朵产生几乎不可察觉的变化。这种技术主要用于图像或音频隐写。

LBS(Least Significant Byte):

是指将信息嵌入到字节的最低有效字节(最不显著字节)中。这意味着将需要隐藏的信息的字节替换为嵌入信息的字节。这种技术在数字签名或加密算法等领域中使用。

LSB和LBS之间的区别

主要在于嵌入信息的级别和操作的单位。

1.嵌入级别: - LSB:通过将信息嵌入到像素的最低有效位中,最低位隐写可以在图像或音频文件中隐藏信息。这是一种较低级别的嵌入,因为每个像素或采样点只嵌入一位信息。 - LBS:通过将信息嵌入到字节的最低有效字节中,最低字节隐写可以在字节级别上隐藏信息。这是一种较高级别的嵌入,因为每个字节可以嵌入一整个字节的信息。

2.操作单位: - LSB:操作单位是像素。在图像和音频隐写中,信息嵌入是在像素级别进行的,即将信息的二进制值替换为像素的最低有效位。 - LBS:操作单位是字节。在数字签名和加密领域中,信息嵌入是在字节级别进行的,即将需要隐藏的字节替换为要嵌入的信息字节。

Bit和Byte的区别

1.Bit(位): - Bit是计算机中的最小存储单位。它可以表示二进制中的0或1,即逻辑上的真或假。 - Bit主要用于表示信息的最小单元,如开关状态、数据传输中的信号等。 - 8个Bit组成了一个字节。

2.Byte(字节): - Byte是计算机存储和处理数据的基本单位。一个字节由8个连续的Bit组成。 - Byte可以表示的数值范围是0到255,对应于8位二进制值的所有可能组合。 - Byte用于表示各种数据,如字符、数字、图像、声音等。

3.关键区别: - Bit是最小单位,表示一个二进制位(0或1)。 - Byte是一个字节,由8个Bit组成,用于表示更大范围的数据。

为什么是“最低”有效位?为什么不能是“最高”等?

在这里,数字和颜色存在一个映射关系:
(非线性)x~f(x)

我们想象一个灰度像素,0是白,255是黑。
x∈[0,255],f(x) 是颜色。
为了让f(x)的变化看起来变化很小,我们需要让x的变化尽可能的小,所以只改变最低位。

如何检测一张图片是否有LSB水印?

image

如何攻击LSB水印?其面对各种攻击的鲁棒性如何?

image

评估水印鲁棒性的指标

image

LSB、DCT、DWT水印“通过模糊性保证安全”存在的问题

image

扩展:能量拆分

image

发表评论