2026.7.13(6)【补充】LSB(最低有效位)隐写原理详解

1. 计算机如何存储颜色?

在计算机中,一张图片由无数个像素点(Pixel) 组成。每个像素点通常由 RGB 三个颜色通道 构成:

通道全称作用
RRed(红色)控制红色分量
GGreen(绿色)控制绿色分量
BBlue(蓝色)控制蓝色分量

每个通道的值范围是 0 ~ 255,用8位二进制(即1个字节)来表示。

例如,一种纯红色像素的 RGB 值为 (255, 0, 0),用二进制表示就是:

通道十进制二进制(8位)
R25511111111
G000000000
B000000000

2. 什么是“最低有效位”?

在二进制中,每一位(bit)都有不同的“权重”。以 8 位二进制数 10110010 为例:

位序76543210
权重1286432168421
数值10110010
  • 最高有效位(MSB):最左边的一位(位序7),权重最高(128),改变它会使数值发生巨大变化。
  • 最低有效位(LSB):最右边的一位(位序0),权重最低(1),改变它数值只会变化 1。

举个例子

原始值修改LSB后的值变化
10110010(十进制 178)10110011(十进制 179)仅变化 1
11111111(十进制 255)11111110(十进制 254)仅变化 1

对于人类肉眼来说,RGB 颜色值变化 1,颜色的差异是根本无法察觉的。这就为隐写提供了绝佳的条件。


3. LSB 隐写是如何工作的?

LSB 隐写的核心思想是:用待隐藏信息的二进制位,去替换掉每个颜色通道的最低位(LSB)

举个例子

假设我们要隐藏字符 A,它的 ASCII 码是 65,二进制是 01000001(8位)。

现在有 3 个像素点(每个像素有 R、G、B 3个通道,共 9 个通道,足够存储 8 位数据 + 1位冗余):

原始像素数据:

像素通道原始值(十进制)原始值(二进制)
像素1R16810101000
像素1G20111001001
像素1B9901100011
像素2R4500101101
像素2G7701001101
像素2B20311001011
像素3R15010010110
像素3G1200001100
像素3B8801011000

替换 LSB 为字符 A01000001)的二进制位:

通道原始二进制要隐藏的位修改后的二进制修改后的十进制
像素1 R10101000010101000168(不变)
像素1 G11001001111001001201(不变)
像素1 B0110001100110001098(-1)
像素2 R0010110100010110044(-1)
像素2 G0100110100100110076(-1)
像素2 B11001011011001010202(-1)
像素3 R10010110010010110150(不变)
像素3 B0000110010000110113(+1)

效果:每个像素的 RGB 值变化最多 1,图片颜色几乎没有任何肉眼可见的变化,但 01000001(字符 A)已经被成功写入了图片中。


4. 如何提取隐藏信息?

提取时不需要知道原始图片,只需遍历每个像素的 RGB 通道,取出每个通道的最低有效位,按顺序拼接起来即可。

例如,提取上表里 9 个通道的 LSB:

0, 1, 0, 0, 0, 0, 0, 1, 0...

按 8 位一组取出,得到 01000001(字符 A),这就是隐藏的信息。


5. 为什么提取时常取“0通道”?

在 StegSolve 的 Data Extract 界面中,会看到 Red: 0 / Green: 0 / Blue: 0 的选项。这里的 “0” 指的就是最低位(第 0 位)。

位序含义
0最低有效位(LSB),最常用于隐写
1次低位,较少使用
7最高有效位(MSB),几乎不会被用于隐写

通常 LSB 隐写使用 第 0 位(即最低位),所以将 Red、Green、Blue 都设为 0 就是最优选择。


6. LSB 隐写的特点与限制
特点说明
隐蔽性强人眼无法察觉颜色变化,只有工具能检测到
容量适中一张 1000×1000 的图片可以隐藏约 300KB 的数据(1000×1000×3÷8)
易被压缩破坏JPEG 等有损压缩会改变像素值,导致信息丢失,因此 LSB 隐写通常使用 PNG(无损压缩)或 BMP 格式
可被统计检测专业的隐写分析工具可以检测 LSB 隐写的痕迹

7. 解题时的操作总结

对于 “镜子里面的世界” 这道题:

  1. StegSolve 打开图片。
  2. 点击 AnalyseData Extract
  3. Red、Green、Blue 的 Bit Plane 都设为 0(即提取每个通道的最低有效位)。
  4. 勾选 LSB First(低位在前)。
  5. 点击 Preview,看到 Flag 后保存即可。
flag{st3g0_saurus_wr3cks}

💡 小窍门:如果 Preview 显示乱码,可以尝试将 LSB First 切换为 MSB First,或者调整 Red/Green/Blue 的通道组合(如只取 Red 0 通道,或红绿蓝 0、1、2 通道一起试)。通过多次尝试不同组合,可以提取出完整信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值