python隐写_Python中的隐写术 – Stepic

本文介绍了最简单的隐写方法,即使用图像的像素最低有效位来隐藏数据。通过每三个连续像素的RGB分量的最低四位,编码一个字节,并在最后一个字节后设置标志位。这种方法在PNG等无损格式中效果良好,但在JPG等有损格式中由于压缩可能会破坏隐藏的数据。因此,对于JPG图像,需要更复杂的隐藏策略,如利用压缩器的参数来隐藏数据。
摘要由CSDN通过智能技术生成

stepic 0.3在图像中使用最简单的隐写方法.直接从模块引用:

def decode_imdata(imdata):

'''Given a sequence of pixels, returns an iterator of characters

encoded in the image'''

imdata = iter(imdata)

while True:

pixels = list(imdata.next()[:3] + imdata.next()[:3] + imdata.next()[:3])

byte = 0

for c in xrange(7):

byte |= pixels[c] & 1

byte <<= 1

byte |= pixels[7] & 1

yield chr(byte)

if pixels[-1] & 1:

break

秘密数据的每个八位字节加上一个标志是否是最后一个字节,都隐藏在三个连续的像素中.更准确地说,stepic使用每个像素的前三个分量(通常是RGB)的最低有效位.看到这个非常丑陋的图表,对于每个组件有4位的RGBA流(D表示数据,E表示流末尾):

| pixel 0 | pixel 1 | pixel 2 |

image viewer sees: | rrrr gggg bbbb aaaa | rrrr gggg bbbb aaaa | rrrr gggg bbbb aaaa |

stepic sees: | ___D ___D ___D ____ | ___D ___D ___D ____ | ___D ___D ___E ____ |

因为这种变化引入的噪声在已经“嘈杂”的图像(第256个)中很小,所以通常无法在视觉上真正检测到这种噪声.这意味着实现了这项技术的目标:数据隐藏在明显的视线中,因为没有人可以将它与自然发生的噪音区分开来.

这很有效.至少,它适用于无损格式,例如PNG.唉,JPG不是无损的,它的压缩很可能会改变至少一个编码位.它足以改变第九位以使该方法变得无用,因为隐藏数据将被截断为单个字节.

JPG图像中的隐写术仍然可以用于多种形式,但你不能仅仅调整解码的像素值.更好(但更复杂)的方法可能是将数据隐藏在压缩器估计的参数中.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值